繁体   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