如何在正则表达式中捕获多个组?

时间:2016-09-06 14:39:03

标签: java regex

我正在尝试捕获以下单词,数字:

stxt:usa,city:14

我可以使用:

捕获美国和14
stxt:(.*?),city:(\d.*)$

然而,当文字是;

stxt:usa 

正则表达式不起作用。我尝试使用 | 来应用或调整,但它不起作用。

stxt:(.*?),|city:(\d.*)$

2 个答案:

答案 0 :(得分:5)

您可以使用

(stxt|city):([^,]+)

请参阅regex demo(注意仅为了演示而添加的\n,在现实生活中不需要它。)

模式详情

  • (stxt|city) - stxtcity子字符串(您可以在\b之前添加(以仅匹配整个字词)(第1组)
  • : - 冒号
  • ([^,]+) - 除逗号(第2组)以外的1个或多个字符。

Java demo

String s = "stxt:usa,city:14";
Pattern pattern = Pattern.compile("(stxt|city):([^,]+)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(1));
    System.out.println(matcher.group(2));
} 

答案 1 :(得分:0)

查看您的字符串,您还可以在冒号后找到单词/数字。

:(\w+)