簡體   English   中英

正則表達式街道地址匹配

[英]regex street address match

雖然我知道匹配街道地址永遠不會是完美的,但我希望創建幾個在大多數情況下都會接近的正則表達式語句。

我正在嘗試突出顯示一個地址。 我不擅長正則表達式,我試圖接近,但有人可以幫助我了解如何使它變得更好嗎?

細繩:

上午 6 點 - 晚上 11 點,帕爾馬索拉小學,西北第五大道 6806 號,布雷登頓,佛羅里達州 34209 快來在 dsfsd sa fsa fasdf asfsds 5001 西邊找,你媽媽不住在這里,我的 2005 年福特護林員,

正則表達式 1:

/\\s+(\\d{2,5}\\s+)(?![a|p]m\\b)(([a-zA-Z|\\s+]{1,5}){1,2}) ?([\\s|\\,|.]+)?(([a-zA-Z|\\s+]{1,30}){1,4})(court|ct|street|st|drive|dr |lane|ln|road|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|NC|ND|NE|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC |SD|TN|TX|UT|VA|VI|VT|WA|WI|WV|WY)([\\s|\\,|.]+)?(\\s+\\d{5})?([\\s |\\,|.]+)/i

(有時只有街道和城市,但沒有州或郵編)

正則表達式 2:

/\\b(\\d{2,5}\\s+)(?![a|p]m\\b)(NW|NE|SW|SE|north|south|west|east|n|e|s|w )?([\\s|\\,|.]+)?(([a-zA-Z|\\s+]{1,30}){1,4})(court|ct|street|st|drive| dr|lane|ln|road|rd|blvd)/i

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

美國地址不是正則語言,無法使用正則表達式進行匹配。 它們在一些孤立的情況下很有幫助,但總的來說,它們會讓你失望,尤其是對於這樣的輸入。

我曾經在一家地址驗證公司工作。 為了回答您的問題,要在文本字符串中“突出顯示地址”,我建議您嘗試使用提取實用程序。 那里有一些,我建議你環顧四周,但這是我們使用你問題中的輸入——如你所見,它找到了地址並驗證了它:

LiveAddress 提取示例

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

我贊揚你勇敢地嘗試過那些正則表達式! 希望這是有幫助的。

我需要為地址做類似的事情

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

馬特是對的。 正則表達式解析永遠不會非常准確。 如果您走這條危險的道路,您將不可避免地遇到合理數量的誤報和漏報。 但是,如果您同意,我實際上喜歡使用兩個正則表達式的組合 - 一個用於基於街道命名的方案,一個用於城市網格方案:

街道名稱系統:

/\b\d{1,6} +.{2,25}\b(avenue|ave|court|ct|street|st|drive|dr|lane|ln|road|rd|blvd|plaza|parkway|pkwy)[.,]?(.{0,25} +\b\d{5}\b)?/ig

網格系統

/(\b( +)?\d{1,6} +(north|east|south|west|n|e|s|w)[,.]?){2}(.{0,25} +\b\d{5}\b)?\b/ig

另請注意,如果地址沒有州和郵政編碼,您基本上可以忘記提取街道名稱后面的任何文本。

這對我有用!

if(address.match(/^\s*\S+(?:\s+\S+){2}/)) {
   console.log('good address!')
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM