2011-12-11 26 views
1

你好,我試圖從一個字符串中提取一個英國郵政編碼,即「該人的房子是在SS9 8ID我們將在晚上8點」,所以我可以提取「SS9 8ID」位。我試過下面的代碼,但由於某種原因它不工作......任何想法?android:extract uk postcode

 String pc1="^([A-PR-UWYZ](([0-9](([0-9]|[A-HJKSTUW])?)?)|([A-HK-Y][0-9]([0-9]|[ABEHMNPRVWXY])?)) [0-9][ABD-HJLNP-UW-Z]{2})|GIR 0AA$"; 
     String test="the person's house is at SS9 8ID we'll be there at 8pm"; 
     Pattern pattern = Pattern.compile(pc1); 
     Matcher matcher = pattern.matcher(test.toUpperCase()); 
     if (matcher.matches()) { 
       //Log.d("pccode:::", matcher.group(1)); 
      Log.d("pccode:::", matcher.group()); 
     } else { Log.d("NO","NO PCODE"); } 

回答

1

matches方法在整個字符串匹配,你應該使用find代替。並且在表達式中不要使用^$

此外SS9 8ID與正則表達式不匹配,因爲ABD-HJLNP-UW-Z不包括郵政編碼中的字母I

+0

SS9 8ID不是有效的英國郵政編碼;我懷疑這個問題是作爲一個例子來彌補的,但是如果他用它作爲測試的例子,那麼這是一個糟糕的選擇。他提供的正則表達式看起來像官方的(減去海外領土,軍事和其他特殊代碼),儘管我沒有詳細檢查它。總之,如果他使用更好的測試代碼,他會有更好的運氣(我使用「TE57 1NG」作爲測試代碼,但使用真實的有效代碼也是一個好主意。 – Spudley

+0

謝謝找到工作!!! – ITECH

+0

如何我接受嗎? – ITECH