2012-08-26 59 views
1
(W[AY]|C[AO])(\\s+\\d{5}) 

所以這目前分析與W或C,隨後郵政編碼開始的狀態。但是,它將所有這些返回爲一個組,如 示例WA 98121 CA 56679將返回組1爲WA 98121,組2爲CA 56679.如何解決這個正則表達式?

如何解決此問題以便在group1中檢索WA group2 98121 group3 CA GROUP4 56679

+0

你用什麼方法來執行正則表達式? – nneonneo

+0

matcher.group() – Phoenix

+0

每個匹配器應該匹配一個狀態 - 郵編組合。嘗試看看組(1),組(2)。 – nneonneo

回答

5

通常要捕獲在一場比賽中搜索「短語」的所有部分,並通過使用組分手這句話的部位,用匹配處理,然後再下一個短語匹配。因此,我將通過向您展示如何使用此方法進行編碼來回避您的問題。

這裏的一些運行的代碼,演示瞭如何正確搭配和使用羣體:

// Regex to match a "state zip" sequence, and capture each part in its own group 
String regex = "(W[AY]|C[AO])\\s+(\\d{5})"; 

// Some sample input 
String input = "blah blah WA 98121 blah blah CA 56679 blah blah"; 

Matcher matcher = Pattern.compile(regex).getMatcher(input); 
while (matcher.find()) { // move to next match, if one exists 
    String state = matcher.group(1); 
    String zip = matcher.group(2); 
    // Work with state and zip values 
    System.out.println("State = " + state + ", zip = " + zip); 
} 

輸出:

State = WA, zip = 98121 
State = CA, zip = 56679 


注意捕獲正則表達式組從1編號。
供參考,組0是整場比賽。