2016-09-06 46 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+)