2012-02-22 659 views
15

雖然我知道匹配街道地址永遠不會是完美的,但我期望創建幾個正則表達式,這些語句將在大部分時間內關閉。正則表達式街道地址匹配

我試圖強調一個地址。我吮吸正則表達式,我試圖接近,但有人可以幫助我理解如何使這更好?

字符串:

早上6點 - 晚上11點,帕拉馬索拉小學,6806第五大道NW,佈雷登頓,佛羅里達州34209來找剛靠近dsfsd SA FSA fasdf asfsds 5001 West的媽媽並不住在這裏我在2005年福特測距儀,

正則表達式1:(?![A | p]米\ b)

/\ S +(\ d {2,5} \ S +)(([A -Za-Z | \ S +] {1,5}){1,2})([\ S |?\,|?] +)(([A-ZA-Z | \ S +] {1,30 }){1,4})(法院| CT |街道| ST |驅動器|博士|車道| LN | RO廣告| RD | BLVD)([\ S | \,| | \;] +)(([A-ZA-Z | \ S +] {1,30}){1,2})([\ S | \,|?] +)\ b(AK | AL | AR | AZ | CA | CO | CT | DC | DE | FL | GA | GU | HI | IA | ID | IL | IN | KS | KY | LA | MA | MD | ME | MI | MN | MO | MS | MT |數控| ND | NE | NH |新澤西州| NM | NV |紐約州| OH | OK |和| PA | RI | SC | SD | TN | TX | UT | VA | VI | VT | WA | WI | WV | WY)([\ S | \,|。] +)(\ S + \ d {5})([\ S |?\,|。 ] +)/ I

(有時只是一個街道和城市,但沒有狀態或zip)

正則表達式2:

/\ b(\ d {2,5-} !\ S +)([A | p]米\ b)(NW | NE | SW | SE |北|南|西|東| N | E | S | W)([\ S?| \ |。 ] +)(([A-ZA-Z | \ S +] {1,30}){1,4})(法院| CT |街道| ST |驅動器|博士|車道| LN |公路| RD | BLVD )/ i

撥弄它:http://jsfiddle.net/isuelt/rMC6P/11/

+1

你不說出你的終極目標,所以我們無法知道你想要什麼,或者我們怎樣才能幫助。 「爲了讓這個更好」是相當模糊:) – 2012-02-22 15:17:56

+17

我的眼睛。我的眼睛。 – geekchic 2012-02-22 15:31:53

+0

歡迎來到Stack Overflow,@isuelt - 現在已經有一段時間了,所以不要忘記單擊複選標記來接受最有用的答案。 – Matt 2013-06-13 23:24:59

回答

31

美國地址是不是正規的語言,不能使用正則表達式匹配。他們在一些孤立的情況下是有幫助的,但總的來說,他們會讓你失望,特別是對於那樣的輸入。

我曾經在地址驗證公司工作。在回答你的問題時,爲了在一串文本中「突出顯示一個地址」,我建議你嘗試一個提取實用程序。有幾個在那裏,我建議你看看周圍,但這裏是ours使用從你的問題輸入---你可以看到,它發現地址和驗證它:

LiveAddress extraction example

API端點返回JSON,其中包含每個地址的開始和結束位置,以及有關每個地址的大量信息。 (請參閱上面圖片底部的CSV輸出。)

我讚揚你冒着你試過的那些正則表達式!希望這是有幫助的。

+0

另一個驗證想法是使用谷歌的地理編碼API找出他們是否有該地址的數據。 – TheTedinator 2012-12-31 05:47:14

+3

... *如果*您正在顯示地圖(TOS)。 – Matt 2012-12-31 16:25:02

+7

這是回答或SmartyStreets的廣告嗎? – Nick 2013-05-29 04:38:31

0

我需要做的地址類似像

800 SE 20 AVENUE#603,迪爾菲爾德海灘

9801 NW 3 STREET APT 5,種植

11909 GLENMORE DRIVE#4 1,珊瑚泉

這是我用

正則表達式
\s*([0-9]*)\s((NW|SW|SE|NE|S|N|E|W))?(.*)((NW|SW|SE|NE|S|N|E|W))?((#|APT|BSMT|BLDG|DEPT|FL|FRNT|HNGR|KEY|LBBY|LOT|LOWR|OFC|PH|PIER|REAR|RM|SIDE|SLIP|SPC|STOP|STE|TRLR|UNIT|UPPR|\,)[^,]*)(\,)([\s\w]*)\n 

它爲地址的每個部分返回單獨的組(我不需要爲我的情況解析狀態名稱)。 嘗試一下這裏 https://regex101.com/r/OsvOxn/3