2013-04-20 68 views
0

所以我想在窗體上的東西提取數據:如何輕鬆解析此字符串?

「聖地亞哥」 - 「聖安東尼奧」 [1319]

我想提取兩個城市的名稱和數量在年底括號內的[]。如果城市是一個字也沒有「」就像這個例子:

托萊多 - 斯普林菲爾德[677]

現在,我使用str.split(「 - 」),然後海峽。分裂(」 [」)。然而,後者並不可靠,如果我嘗試使用split(「」),它將會分裂到兩個詞語城市的中間。

回答

5

一個正則表達式似乎分配:

"?(.*?)"?--"?(.*?)"? \[(.*?)] 

在Java:

Pattern p = Pattern.compile("\"?(.*?)\"?--\"?(.*?)\"? \\[(.*?)]"); 
Matcher m = p.matcher("\"San Diego\"--\"San Antonio\" [1319]"); 
if (m.find()) { 
    System.out.println(m.group(1)); 
    System.out.println(m.group(2)); 
    System.out.println(m.group(3)); 
} 

打印:

San Diego 
San Antonio 
1319 

正則表達式的解釋

  • "?意味着「一"與否」
  • .*?意味着「任何字符串」
  • 括號捕捉它們之間的數據,這就是爲什麼事後,我們可以m.group(...)訪問它們。
+0

謝謝你,我想了解正則表達式很長一段時間,但從來沒有得到!更高級的東西的抓地力,像這樣,你能解釋一下這個表達中的含義嗎? – Alex 2013-04-20 19:27:55

+0

@Alex我有edi特德的答案,我希望可以幫助:) – sp00m 2013-04-20 23:32:09

+0

你必須雙斜槓逃脫「[」但不是「]」? – Alex 2013-04-21 12:09:19

0

通過拆分之後 - 然後使用檢查contains()方法用於「如果這是真的,然後通過空和[分割

1

你也可以使用的StringTokenizer的替代正則表達式,在StringTokenizer的就可以了。指定分隔符彼此相鄰,這裏假設你想要的 - 和[作爲分隔符,所以只寫 - [中分隔符節

String input="\"San Diego\"--\"San Antonio\" [1319]"; 
StringTokenizer tok = new StringTokenizer(input, "--["); 
while (tok.hasMoreTokens()) 
{ 
    System.out.println(tok.nextToken()); 
} 
+0

它如何知道「 - 」和「[」是不同的分隔符,當他們只是寫在另一個「 - 」? – Alex 2013-04-21 12:14:23

+0

我完全不知道後端,但它會以某種方式知道它 – 2013-04-21 12:52:11

+0

好的,這是很好的知道。所以規則是如果它匹配字符串中的任何部分分隔符? – Alex 2013-04-21 12:53:42