2012-02-22 663 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