2013-08-03 49 views
0

我有以下代碼,我想用它來從地址字符串中獲取街道名稱。正則表達式解析街道名稱

對於「77 ELM ST」的地址,下面的代碼給了我「ELM」,它是正確的。

對於「115 GEORGE APPLETON FOX ST」的地址,代碼給出「APPLETON」。預期的結果應該是「喬治·阿普爾頓FOX」

例如:

private static String ADDRESS_PATTERN = "^\\d*\\s*(\\w+\\s*)*ST$"; 

public String parseStreet(String address) { 
    Pattern addressPattern = Pattern.compile(ADDRESS_PATTERN); 
    Matcher matcher = addressPattern.matcher(address); 
    boolean found = matcher.find(); 
    return found ? matcher.group(1).trim() : null; 
} 

我在做什麼錯?

+1

我希望那個正則表達式給你'FOX'來代替。你確定它給了'APPLETON'嗎? –

+0

是的,它給APPLETON – timmy

回答

4

將捕獲組放在要捕獲的子匹配周圍。例如:

"^\\d*\\s*((?:\\w+\\s*)*)ST$" 
+0

謝謝!捕獲submatch的作品。我能夠使用:「」^ \\ d * \\ s *((\\ w + \\ s *)*)ST $「。您的解決方案還建議使用?:。該服務的目的是什麼? – timmy

+0

' (?:...)'是一個非捕捉組,它是一個很好的習慣,只捕捉你需要的東西 – Qtax

+2

@ user106563'?:'用於創建一個非捕捉組,這裏我們不想捕獲街道名稱的單個詞語,而不是整個街道名稱 –