2012-02-22 19 views
15

Si bien sé que una dirección de calle nunca será perfecta, estoy buscando crear un par de declaraciones de expresiones regulares que se acercarán la mayor parte del tiempo.regex calle dirección coincidencia

Estoy tratando de resaltar una dirección. Apesta a Regex y he tratado de acercarme, pero ¿podría alguien ayudarme a entender cómo puedo mejorarlo?

cadena:

06 a.m.-11 p.m., Palma Sola Primaria, 6806 Fifth Ave. NW, Bradenton, FL 34209 Ven encuentra justo al lado del dsfsd sa FSA fasdf asfsds 5001 West tu madre ya no vive aquí mi 2005 Ford ranger,

Regex 1: (?! [a | p] m \ b)

/\ s + (\ d {2,5} \ s +) (([a -zA-Z | \ s +] {1,5}) {1,2})? ([\ s | \, |.] +)? (([a-zA-Z | \ s +] {1,30 }) {1,4}) (tribunal | ct | calle | st | unidad | dr | carril | ln | ro ad | 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 | O | PA | RI | SC | SD | TN | TX | UT | VA | VI | VT | WA | WI | WV | WY) ([\ s | \, |.] +)? (\ S + \ d {5})? ([\ S | \, |. ] +)/i

(a veces hay sólo una calle y la ciudad, pero ningún estado o código postal)

expresión regular 2:

/\ b (\ d {2,5} \ s +) (?! [a | p] m \ b) (NW | NE | SW | SE | norte | sur | oeste | este | n | e | s | w)? ([\ s | \, |. ] +)? (([a-zA-Z | \ s +] {1,30}) {1,4}) (corte | ct | calle | st | drive | dr | carril | ln | camino | rd | blvd)/i

jugar con él: http://jsfiddle.net/isuelt/rMC6P/11/

+1

No mencionas tu objetivo final, por lo que no podemos saber lo que quieres o cómo podemos ayudarte. "Para que esto sea mejor" es bastante vago :) –

+17

Mis ojos. MIS OJOS. – geekchic

+0

Bienvenido a Stack Overflow, @isuelt - ha pasado bastante tiempo, así que no olvides aceptar la respuesta más útil haciendo clic en la marca de verificación. – Matt

Respuesta

31

direcciones de Estados Unidos no son un lenguaje regular, y no puede ser igualada por el uso de expresiones regulares. Son útiles en algunos casos aislados, pero, en general, le fallarán, especialmente para comentarios como ese.

Solía ​​trabajar en una empresa de verificación de direcciones. En respuesta a su pregunta, para "resaltar una dirección" en una cadena de texto, le recomiendo que pruebe una utilidad de extracción. Hay algunos por ahí y me sugieren que mire a su alrededor, pero aquí es ours utilizando la entrada de su pregunta --- como se puede ver, se encontró la dirección y validada que:

LiveAddress extraction example

El punto final API devuelve JSON que contiene las posiciones inicial y final de cada dirección, así como mucha información sobre cada una. (Consulte la salida CSV en la parte inferior de la imagen de arriba.)

Lo felicito por desafiar esas expresiones regulares que ha intentado. Espero que esto sea útil.

+0

Una idea de verificación adicional sería utilizar la API de geocodificación de Google para averiguar si tienen datos para esa dirección. – TheTedinator

+3

... * si * muestra un mapa (TOS). – Matt

+7

¿Es esta una respuesta o un anuncio de SmartyStreets? – Nick

0

que tenía que hacer algo similar para las direcciones como

800 SE 20 Avenue # 603, de Deerfield Beach

9801 NW 3 CALLE APT 5, Plantation

11909 GLENMORE DRIVE # 4 1, de Coral Springs

Esta es la expresión regular que utilicé

\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 

Devuelve grupos separados para cada parte de la dirección (no necesité analizar el nombre de estado de mi caso). Pruébalo aquí https://regex101.com/r/OsvOxn/3

Cuestiones relacionadas