2012-02-22 2 views
15

Хотя я знаю, что сопоставление уличного адреса никогда не будет идеальным, я ищу пару выражений регулярных выражений, которые будут закрываться большую часть времени.regex адрес для улицы

Я пытаюсь выделить адрес. Я отстой в регулярном выражении, и я попытался приблизиться, но может ли кто-нибудь помочь мне понять, как я могу сделать это лучше?

строка:

6 AM - 11 пМ Palma Sola Elementary, 6806 Fifth Ave NW, Bradenton, FL 34209 Приходит найти только возле dsfsd са ФС fasdf asfsds 5001 запада вашей мамочки здесь не живет мой 2005 Ford Ranger,

Regex 1: (?! [а | р] м \ б)

/\ s + (\ d {2,5} \ s +) (([а -zA-Z | \ S +] {1,5}) {1,2}) ([\ S |? \, |.?] +), (([A-Za-Z | \ S +] {1,30 }) {1,4}) (суд | кт | улица | й | привод | др | полоса | пер | ро объявления | й | б-р) ([\ S | \, | | \;.]? +) (([A-Za-Z | \ S +] {1,30}) {1,2}) ([\ s | \ |.?] +) \ б (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 | МО | MS | MT | NC | ND | NE | NH | NJ | NM | NV | NY | OH | OK | ИЛИ | PA | RI | SC | SD | TN | TX | УТ | ВА | VI | ВТ | ВД | WI | WV | Вайоминг) ([\ s | \, |.]? +) (\ s + \ д {5}) ([\ s |? \, |. ] +)/я

(Иногда это просто улица и город, но ни одно государство или почтовый индекс)

регулярное выражение 2:

/\ Ь (\ d {2,5} ?! \ S +) ([а | р] м \ б) (NW | NE | SW | SE | север | юг | запад | восток | п | е | s | ж) ([\ S |? \ |. ] +) (([A-Za-Z | \ S +] {1,30})? {1,4}) (суд | кт | улица | й | привод | др | полоса | пер | дороги | е | бульв)/i

Fiddle с ним: http://jsfiddle.net/isuelt/rMC6P/11/

+1

Вы не заявляете о своей конечной цели, поэтому мы не можем знать, что вы хотите или как нам помочь. «Сделать это лучше» довольно расплывчато :) –

+17

Мои глаза. МОИ ГЛАЗА. – geekchic

+0

Добро пожаловать в Stack Overflow, @isuelt - это уже давно, поэтому не забудьте принять наиболее полезный ответ, нажав галочку. – Matt

ответ

31

США адрес не регулярный язык, и не может быть сопоставлен с помощью регулярных выражений. Они полезны в некоторых отдельных случаях, но, в общем, они вас не сработают, особенно для такого ввода.

Раньше я работал в адресной компании. В ответ на ваш вопрос, чтобы «выделить адрес» в строке текста, я рекомендую попробовать утилиту для извлечения. Есть несколько там, и я предлагаю вам взглянуть вокруг, но вот ours используя входные данные из вашего вопроса --- как вы можете видеть, он нашел адрес и подтвержден его:

LiveAddress extraction example

Конечная точка API возвращает JSON, который содержит начальную и конечную позиции каждого адреса, а также множество информации о каждом из них. (См. Вывод CSV в нижней части рисунка выше.)

Я благодарю вас за то, что вы решились на эти регулярные выражения! Надеюсь, это полезно.

+0

. Дополнительная идея проверки заключалась бы в том, чтобы использовать API геокодирования Google, чтобы узнать имеются ли у них данные для этого адреса. – TheTedinator

+3

... * если * вы показываете карту (TOS). – Matt

+7

Это ответ или реклама для SmartyStreets? – Nick

0

мне нужно сделать что-то подобное для адресов, как

800 SE 20 Avenue # 603, Deerfield Beach

9801 NW 3 STREET APT 5, ПЛАНТАЦИЯ

11909 Glenmore ПРИВОД # 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