[英]regex for capturing a group
我正在为一个项目学习正则表达式。 试图找到一个正则表达式,它将在 "\[format((([[X]]+2)),"#####0.##### 中捕获 (([[X]]+2)) #")]"。 我正在尝试的代码在这里:
Pattern patternFormat1 = Pattern.compile("\\[format\\(^(.+?),");
String min = "\\[format((([[X]]+2)),\"#####0.######\")]";
Matcher matcherMin = patternFormat1.matcher(min);
if(matcherMin.find())
System.out.println(matcherMin.group(1));
我找到了答案。 我做了一个小改动,它奏效了。
Pattern.compile("\\[format\\((.+?),");
代替
Pattern.compile("\\[format\\(^(.+?),")
如果您只是希望您的正则表达式精确捕获(([[X]]+2))
并且只捕获那个字符串,那么以下正则表达式将完成这项工作:
\((\(.*\)\))
如果你想捕捉任何看起来像你的模式但有另一个数字而不是 2 的东西,你可以使用那个:
\((\(\(.*\+\d+\)\))
让我解释一下最后一个正则表达式:
我们在这个正则表达式中使用了 5 种不同的东西:
()
.
\d
+
*
因此,现在让我们将您的目标分为 5 个部分:
+
这些部分对应于:
\+\d+
.*\+\d+
\(\(.*\+\d+\)\)
(\(\(.*\+\d+\)\))
\((\(\(.*\+\d+\)\))
注意:这个正则表达式远非最佳。 这个答案侧重于在您的上下文中解释正则表达式,如果您有更多数据,它可能不适用于您的所有数据,但您下次应该能够自己找到答案;)
我建议将https://regex101.com/用于正则表达式,这是一个非常有用的网站。
^
断言在您的模式中不起作用的字符串的开头,因为它匹配之前的字符。
您可以使用插入符号^
但在匹配除逗号以外的任何字符的否定字符类的上下文中。
\[format\(([^,]+),
在具有双退格键的 Java 中:
String regex = "\\[format\\(([^,]+),";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.