Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java解析正则表达式多个捕获组_Java_Regex_Regex Group - Fatal编程技术网

java解析正则表达式多个捕获组

java解析正则表达式多个捕获组,java,regex,regex-group,Java,Regex,Regex Group,嗨,我需要能够处理这两种情况 约翰,四人党 威廉,6人党不喜欢约翰,杰夫 我想捕捉的是 来自字符串1:John,4 第二组:威廉,6岁,约翰,杰夫 我对如何做到这一点感到非常困惑 我知道([^,])+给了我第一个组(只是逗号前的名称,不包括逗号),但我不知道如何连接表达式的其他部分。您可以使用 (\w+)(?:,\s*party of (\d+)|(?![^,])) 看 详细信息 (\w+)-第1组:一个或多个单词字符 (?:,\s*参与方(\d+)(?![^,])-非捕获组匹配 ,\

嗨,我需要能够处理这两种情况

约翰,四人党
威廉,6人党不喜欢约翰,杰夫

我想捕捉的是

  • 来自字符串1:John,4
  • 第二组:威廉,6岁,约翰,杰夫
我对如何做到这一点感到非常困惑

我知道
([^,])+
给了我第一个组(只是逗号前的名称,不包括逗号),但我不知道如何连接表达式的其他部分。

您可以使用

(\w+)(?:,\s*party of (\d+)|(?![^,]))

详细信息

  • (\w+)
    -第1组:一个或多个单词字符
  • (?:,\s*参与方(\d+)(?![^,])
    -非捕获组匹配
    • ,\s*party of(\d+)
      -
      ,然后是0+空格,然后是
      party of
      和空格,然后第2组捕获1+个数字
    • |
      -或
    • (?![^,])
      -后跟
      或字符串结尾的位置
:


试试这个正则表达式(?:(?:^ |)(?:[^A-Za-z,])?([^,]+)+这是用于获取名称的。您介意拆分字符串或引用它们吗?我分不清哪一个是字符串1,哪一个是字符串2。欢迎来到SO@Joe,请阅读:。一个简单的改进是在代码块周围加上反勾“`谢谢大家!抱歉格式化@jkinkeadThank@PedroLobito
String regex = "(\\w+)(?:,\\s*party of (\\d+)|(?![^,]))";
List<String> strings = Arrays.asList("John, party of 4", "william, party of 6 dislikes John, jeff");

Pattern pattern = Pattern.compile(regex);
for (String s : strings) {
    System.out.println("-------- Testing '" + s + "':");
    Matcher matcher = pattern.matcher(s);
    while (matcher.find()) {
        System.out.println(matcher.group(1) + ": " + (matcher.group(2) != null ? matcher.group(2) : "N/A"));
    }
}
-------- Testing 'John, party of 4':
John: 4
-------- Testing 'william, party of 6 dislikes John, jeff':
william: 6
John: N/A
jeff: N/A