【问题标题】:How to write regex that captures unlimited number of groups?如何编写捕获无限数量组的正则表达式?
【发布时间】:2012-02-04 21:05:46
【问题描述】:

我有一个包含多个单词的字符串,例如str1, str2, str3, ... strN。字数可以是任意的,并且在编写正则表达式时未知。

是否可以编写匹配整个字符串和捕获组的正则表达式,每组一个单词?也就是说将捕获以下组:

第 1 组:str1
...
N组:strN

原因:该字符串是较大字符串的一部分。可以使用正则表达式捕获大字符串的其他元素。我可以使用正则表达式解析大字符串并将具有多个单词的字符串捕获到一组。然后我可以把这个组分成其他str(s)。我认为如果存在的话,对于整个大字符串没有拆分的正则表达式的解决方案会更加优雅。

【问题讨论】:

  • 为什么是正则表达式? split 的形式在这里听起来更合适。
  • Java 但如果没有针对 Java 的解决方案,请提供其他语言的解决方案。
  • 正如@Mat所说,必须使用split,见下文。

标签: regex parsing regex-group


【解决方案1】:

假设您的输入字符串名为input

final String[] groups = input.split("\\s*,\\s*");

groups 数组将包含所有匹配项。

【讨论】:

  • 谢谢,但我正在寻找正则表达式解决方案,请参阅有问题的更新原因。无论如何,即使存在拆分解决方案,它似乎也比正则表达式更优雅。
  • 只使用一个正则表达式是个坏主意,它很快就会变得不可读。特别是因为您说您可以在一个组中捕获 x,y,z,t...:只需提取该组并将其拆分。
【解决方案2】:

您可以做一些非常相似的事情:编写一个只有 1 个组的正则表达式,然后检查该组的所有匹配项。在java中它看起来像这样:

    Pattern p = Pattern.compile("\\b(\\w+)\\b(?:,\\s)*");
    Matcher m = p.matcher("str1, str2, str3, ... strN");
    while(m.find()){
        System.out.println(m.group(1));
    }

结果是:

str1
str2
str3
...
strN

纯正则表达式是 \b(\w+)\b(?:,\s)* ,其中 (?: 是非捕获组(不计入组)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    相关资源
    最近更新 更多