2016-09-06 58 views
1

我试图捕捉下面的字,号:如何在正则表达式中捕获多个组?

stxt:usa,city:14 

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

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

然而,当文本;

stxt:usa 

该正则表达式不起作用。我试图申请或使用|但它没有工作。

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

也许['^ stxt:(。*?)?(?:,城市:(\ d *))$'](https://regex101.com/R/hT2lW8/1)?或者你是否也想支持'city:14'这样的具有相同模式的字符串?用逗号分割,然后用':'分割,会更容易。 –

+0

这种格式的数据可能会通过一些拆分得到更好的处理,另请参阅https://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Splitter.MapSplitter.html – 2016-09-06 14:43:36

+0

@ WiktorStribiżew是的,我想支持个人查询城市和stxt。您提供的正则表达式适用于stxt,但我无法理解它! – kinkajou

回答

4

您可以使用

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

regex demo(注意只用于演示的目的添加的\n,你不需要它在现实生活中)。

图案的详细资料

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

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)); 
} 
0

看着你的字符串,你也可以在冒号后面找到单词/数字。

:(\w+)