繁体   English   中英

用于捕获组的正则表达式

[英]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 种不同的东西:

  1. 捕获组()
  2. 任何字符.
  3. 数字字符\d
  4. 一次或多次+
  5. 尽可能多(从 0 到 inf)也称为“贪婪” *

因此,现在让我们将您的目标分为 5 个部分:

  1. 至少一个数字前面有一个+
  2. 前面有东西
  3. 2组括号之间
  4. 捕获相应的 3 个步骤
  5. 将我放在三个左括号的开头

这些部分对应于:

  1. \+\d+
  2. .*\+\d+
  3. \(\(.*\+\d+\)\)
  4. (\(\(.*\+\d+\)\))
  5. \((\(\(.*\+\d+\)\))
  • 你做到了 ;)

注意:这个正表达式远非最佳。 这个答案侧重于在您的上下文中解释正则表达式,如果您有更多数据,它可能不适用于您的所有数据,但您下次应该能够自己找到答案;)
我建议将https://regex101.com/用于正则表达式,这是一个非常有用的网站。

^断言在您的模式中不起作用的字符串的开头,因为它匹配之前的字符。

您可以使用插入符号^但在匹配除逗号以外的任何字符的否定字符类的上下文中。

\[format\(([^,]+),

正则表达式演示

在具有双退格键的 Java 中:

String regex = "\\[format\\(([^,]+),";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM