首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java :模式"10{1,1 %d},10{2,1 %d}“的正则表达式是什么?

Java :模式"10{1,1 %d},10{2,1 %d}“的正则表达式是什么?
EN

Stack Overflow用户
提问于 2019-03-15 04:44:55
回答 1查看 644关注 0票数 0

考虑以下例子:

代码语言:javascript
复制
Regex: (.\*?),(.\*)
String: 10,20
Result: Group1: 10; Group2: 20

类似地,

代码语言:javascript
复制
Regex: ???
String: 10{1,1 %d},10{2,1 %d}
Expected result: Group1: 10{1,1 %d}; Group2: 10{2,1 %d}

与第二个示例一样,字符串多次包含",“,这将导致意外的输出。在这种情况下,我们如何才能达到预期的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-15 06:08:55

小心劈开

因此,听起来您想要用逗号分隔字符串,除非逗号是用一对匹配的分隔符括起来的,例如"{} [] <>维希“。目前,我假设这个文件是正常的,没有嵌套标记。

因此,要找到所有这些组,我们想要将匹配看作是除逗号、以外的任何字符串,如果有周围的标记,则部分匹配是有效的。

代码

代码语言:javascript
复制
String pattern = "[^,]*?({.*?}|\[.*?]|<.*?>|\|.*?\|)[^,]*?";
Pattern p = Pattern.compile(pattern);

这个模式应该适合你。它将匹配没有逗号启动的任何字符串,它在"{} [] <>维珍“中有某种包装器,并且可能以某些文本结尾。您甚至可以将pattern包装在一个组中,并让它重复。就像这样:

代码语言:javascript
复制
String pattern = "([^,]*?({.*?}|\[.*?]|<.*?>|\|.*?\|)[^,]*?)+"; // Notice the parens on the outside and the '+'
Pattern p = Pattern.compile(pattern);

如果大括号是可选的,也要考虑:

代码语言:javascript
复制
String pattern = "[^,]*?({.*?}|\[.*?]|<.*?>|\|.*?\|)?[^,]*?"; // Notice the added '?'
Pattern p = Pattern.compile(pattern);

我完全忘记了用于搜索字符串以获得多个结果的java实现是什么,但是这在python中使用searchmatchfinditer方法是可行的,而且该模式仍然适用于java。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55175698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档