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+)|(?![^,]))
看
详细信息
-第1组:一个或多个单词字符(\w+)
-非捕获组匹配(?:,\s*参与方(\d+)(?![^,])
-,\s*party of(\d+)
,然后是0+空格,然后是,
和空格,然后第2组捕获1+个数字party of
-或|
-后跟(?![^,])
或字符串结尾的位置、
试试这个正则表达式(?:(?:^ |)(?:[^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