所以我想在窗體上的東西提取數據:如何輕鬆解析此字符串?
「聖地亞哥」 - 「聖安東尼奧」 [1319]
我想提取兩個城市的名稱和數量在年底括號內的[]。如果城市是一個字也沒有「」就像這個例子:
托萊多 - 斯普林菲爾德[677]
現在,我使用str.split(「 - 」),然後海峽。分裂(」 [」)。然而,後者並不可靠,如果我嘗試使用split(「」),它將會分裂到兩個詞語城市的中間。
所以我想在窗體上的東西提取數據:如何輕鬆解析此字符串?
「聖地亞哥」 - 「聖安東尼奧」 [1319]
我想提取兩個城市的名稱和數量在年底括號內的[]。如果城市是一個字也沒有「」就像這個例子:
托萊多 - 斯普林菲爾德[677]
現在,我使用str.split(「 - 」),然後海峽。分裂(」 [」)。然而,後者並不可靠,如果我嘗試使用split(「」),它將會分裂到兩個詞語城市的中間。
一個正則表達式似乎分配:
"?(.*?)"?--"?(.*?)"? \[(.*?)]
在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(...)
訪問它們。通過拆分之後 - 然後使用檢查contains()方法用於「如果這是真的,然後通過空和[分割
你也可以使用的StringTokenizer的替代正則表達式,在StringTokenizer的就可以了。指定分隔符彼此相鄰,這裏假設你想要的 - 和[作爲分隔符,所以只寫 - [中分隔符節
String input="\"San Diego\"--\"San Antonio\" [1319]";
StringTokenizer tok = new StringTokenizer(input, "--[");
while (tok.hasMoreTokens())
{
System.out.println(tok.nextToken());
}
謝謝你,我想了解正則表達式很長一段時間,但從來沒有得到!更高級的東西的抓地力,像這樣,你能解釋一下這個表達中的含義嗎? – Alex 2013-04-20 19:27:55
@Alex我有edi特德的答案,我希望可以幫助:) – sp00m 2013-04-20 23:32:09
你必須雙斜槓逃脫「[」但不是「]」? – Alex 2013-04-21 12:09:19