Regex 如何编写捕获无限组数的正则表达式?

Regex 如何编写捕获无限组数的正则表达式?,regex,parsing,regex-group,Regex,Parsing,Regex Group,我有一个包含多个单词的字符串,如str1、str2、str3。。。strN。字数可以是任意的,在编写正则表达式时不知道 是否可以编写匹配整个字符串和捕获组的正则表达式,每组一个单词?也就是说,将捕获以下组: 第1组:str1 … N组:strN 原因:此字符串是较大字符串的一部分。可以使用正则表达式捕获大字符串的其他元素。我可以使用正则表达式解析大字符串,并将包含多个单词的字符串捕获到一个组中。然后我可以将此组拆分为其他str。我认为,如果有一个解决方案,在不拆分的情况下为整个大字符串使用正则表

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

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

第1组:str1

N组:strN


原因:此字符串是较大字符串的一部分。可以使用正则表达式捕获大字符串的其他元素。我可以使用正则表达式解析大字符串,并将包含多个单词的字符串捕获到一个组中。然后我可以将此组拆分为其他
str
。我认为,如果有一个解决方案,在不拆分的情况下为整个大字符串使用正则表达式,那么它将更加优雅。

前提是您的输入字符串被称为
input

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

数组将包含所有匹配项。

前提是您的输入字符串被称为
input

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

数组将包含所有匹配项。

您可以执行非常类似的操作:编写一个只包含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)*
,其中
(?:
是一个非捕获组(不算为一个组)。

您可以做一些非常类似的事情:编写一个只有一个组的正则表达式,然后检查该组的所有匹配项。在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)*
,其中
(?:
是一个非捕获组(不计算为一个组).

为什么使用正则表达式?一种形式的
split
在这里听起来更合适。Java但是如果没有Java的解决方案,请提供另一种语言。正如@Mat所说,必须使用split,见下文。为什么使用正则表达式?一种形式的
split
在这里听起来更合适。Java但是如果没有Java的解决方案,请提供为另一种语言编写。正如@Mat所说,必须使用split,请参见下文。谢谢,但我正在寻找正则表达式解决方案,请参见相关更新原因。无论如何,split解决方案似乎比regex-one更优雅,即使它存在。仅使用一个正则表达式是一个坏主意,它很快就会变得不可读。特别是因为你说你可以捕获x、 y,z,t…在一个组中:只需提取该组并将其拆分。谢谢,但我正在寻找正则表达式解决方案,请参阅问题的更新原因。无论如何,拆分解决方案似乎比正则表达式解决方案更优雅,即使它存在。仅使用一个正则表达式是一个坏主意,它很快就会变得不可读。特别是因为您说可以捕获x,y,z,t。。。分组:只需提取该组并将其拆分。