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

kin*_*jou 1 java regex

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

stxt:usa,city:14
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令捕获美国和14国:

stxt:(.*?),city:(\d.*)$
Run Code Online (Sandbox Code Playgroud)

但是,当文本是

stxt:usa 
Run Code Online (Sandbox Code Playgroud)

正则表达式不起作用。我尝试使用| 但它没有用。

stxt:(.*?),|city:(\d.*)$
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

您可以使用

(stxt|city):([^,]+)
Run Code Online (Sandbox Code Playgroud)

参见regex演示(请注意,\n仅出于演示目的而添加了该标签,您在现实生活中不需要它)。

图案细节

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

Java演示

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));
} 
Run Code Online (Sandbox Code Playgroud)