correspondência de rua regex

Embora eu saiba que a correspondência de um endereço de rua nunca seja perfeita, estou tentando criar algumas declarações de regex que fiquem próximas a maior parte do tempo.

Estou tentando destacar um endereço. Eu suga a regex e eu tentei chegar perto, mas alguém poderia me ajudar a entender como eu posso fazer isso melhor?

corda:

6 am – 11 pM, Palma Sola Elementar, 6806 Quinta Avenida NW, Bradenton, FL 34209 Venha encontrar apenas perto do dsfsd sa fsa fasdf asfsds 5001 oeste sua mamãe não mora aqui meu 2005 ford ranger,

Regex 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}) (corte | ct | rua | st | passeio | dr | lane | ln | estrada | 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 | OU | PA | RI | SC | SD | TN | TX | UT | VA | VI | VT | WA | WI | WV | WY) ([\ s | \, |.] +)? (\ S + \ d {5})? ([\ S | \, |.] +) / i

(Às vezes há apenas uma rua e cidade, mas nenhum estado ou zip)

regex 2:

/ \ b (\ d {2,5} \ s +) (?! [a | p] m \ b) (NW | NE | SW | SE | norte | sul | oeste | leste | n | e | s | w )? ([\ s | \, |.] +)? (([a-zA-Z | \ s +] {1,30}) {1,4}) (tribunal | ct | rua | st | unidade | pista | ln | estrada | rd | blvd) / i

Mexa com isso: http://jsfiddle.net/isuelt/rMC6P/11/

Os endereços dos EUA não são um idioma regular e não podem ser correspondidos usando expressões regulares. Eles são úteis em alguns casos isolados, mas, em geral, eles falharão em você, especialmente para sugestões desse tipo.

Eu costumava trabalhar em uma empresa de verificação de endereço. Em resposta à sua pergunta, para “destacar um endereço” em uma string de texto, recomendo que você tente um utilitário de extração. Há alguns por aí e eu sugiro que você olhe ao redor, mas aqui está o nosso usando a input da sua pergunta — como você pode ver, ele encontrou o endereço e o validou:

Exemplo de extração do LiveAddress

O terminal da API retorna JSON, que contém as posições inicial e final de cada endereço, além de muitas informações sobre cada um deles. (Veja a saída CSV na parte inferior da imagem acima.)

Eu elogio você por enfrentar essas expressões regulares que você tentou! Espero que isso seja útil.

Eu precisava fazer algo semelhante para endereços como

800 SE 20 AVENIDA # 603, DEERFIELD BEACH

9801 NW 3 STREET APT 5, PLANTAÇÃO

11909 GLENMORE DRIVE # 4-1, MOLAS CORAIS

Este é o regex que eu usei

\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 

Ele retorna grupos separados para cada parte do endereço (não precisei analisar o nome do estado para o meu caso). Experimente aqui https://regex101.com/r/OsvOxn/3

Matt está certo. A análise de regex nunca será muito precisa. Você inevitavelmente terá um número razoável de falsos positivos e falsos negativos se você seguir esse caminho perigoso. No entanto, se você está bem com isso, eu realmente gostaria de usar uma combinação de dois regexes – um para esquemas baseados em ruas e um para esquemas de grade da cidade:

Sistema de nomes de ruas:

 /\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 

Sistema de rede

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

Observe também que, se o endereço não tiver um estado e CEP, basicamente você poderá esquecer de extrair qualquer texto que vá após o apelido de rua.