1
我试图捕捉下面的字,号:如何在正则表达式中捕获多个组?
stxt:usa,city:14
我可以捕获美国和14使用:
stxt:(.*?),city:(\d.*)$
然而,当文本;
stxt:usa
该正则表达式不起作用。我试图申请或使用|但它没有工作。
stxt:(.*?),|city:(\d.*)$
我试图捕捉下面的字,号:如何在正则表达式中捕获多个组?
stxt:usa,city:14
我可以捕获美国和14使用:
stxt:(.*?),city:(\d.*)$
然而,当文本;
stxt:usa
该正则表达式不起作用。我试图申请或使用|但它没有工作。
stxt:(.*?),|city:(\d.*)$
您可以使用
(stxt|city):([^,]+)
见regex demo(注意只用于演示的目的添加的\n
,你不需要它在现实生活中)。
图案的详细资料:
(stxt|city)
- 无论是stxt
或city
子(你可以在(
前添加\b
只匹配整个单词)(第1组):
- 冒号([^,]+)
- 除逗号以外的一个或多个字符(组2)。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));
}
看着你的字符串,你也可以在冒号后面找到单词/数字。
:(\w+)
也许['^ stxt:(。*?)?(?:,城市:(\ d *))$'](https://regex101.com/R/hT2lW8/1)?或者你是否也想支持'city:14'这样的具有相同模式的字符串?用逗号分割,然后用':'分割,会更容易。 –
这种格式的数据可能会通过一些拆分得到更好的处理,另请参阅https://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Splitter.MapSplitter.html – 2016-09-06 14:43:36
@ WiktorStribiżew是的,我想支持个人查询城市和stxt。您提供的正则表达式适用于stxt,但我无法理解它! – kinkajou