coincidencia de dirección de calle de expresiones regulares

3 minutos de lectura

avatar de usuario
isuelto

Si bien sé que hacer coincidir una dirección de calle nunca será perfecto, estoy buscando crear un par de declaraciones de expresiones regulares que se acerquen la mayor parte del tiempo.

Estoy tratando de resaltar una dirección. Apesto en expresiones regulares y he tratado de acercarme, pero ¿alguien podría ayudarme a entender cómo puedo mejorar esto?

cuerda:

6 a.

Regex 1:

/\s+(\d{2,5}\s+)(?![a|p]megabyte)(([a-zA-Z|\s+]{1,5}){1,2})?([\s|\,|.]+)?(([a-zA-Z|\s+]{1,30}){1,4})(cancha|ct|calle|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|\,|.]+)/yo

(A veces solo hay una calle y una ciudad, pero no un estado ni un 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})(cancha|ct|calle|st|drive|dr|lane|ln|road|rd|blvd)/i

Juega con eso: http://jsfiddle.net/isuelt/rMC6P/11/

  • No indica su objetivo final, por lo que no podemos saber qué quiere o cómo podemos ayudarlo. “Para mejorar esto” es bastante vago 🙂

    – Willem Mulder

    22 de febrero de 2012 a las 15:17

  • Mis ojos. MIS OJOS.

    – friki elegante

    22 de febrero de 2012 a las 15:31

  • Bienvenido a Stack Overflow, @isuelt: ha pasado un tiempo, así que no olvide aceptar la respuesta más útil haciendo clic en la marca de verificación.

    – Mate

    13 de junio de 2013 a las 23:24

  • Encontré que este también es útil: codeproject.com/Tips/989012/…

    – David

    26 de noviembre de 2017 a las 3:28

avatar de usuario
escocés

Matt tiene razón. El análisis de Regex nunca será muy preciso. Inevitablemente tendrá un número razonable de falsos positivos y falsos negativos si sigue este peligroso camino. Sin embargo, si está de acuerdo con eso, en realidad me gusta usar una combinación de dos expresiones regulares: una para esquemas basados ​​​​en nombres de calles y otra para esquemas de cuadrícula de ciudades:

Sistema de nombres de calles:

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

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

También tenga en cuenta que si la dirección no tiene un estado y código postal, básicamente puede olvidarse de extraer cualquier texto que vaya después del apodo de la calle.

avatar de usuario
nimatra

Necesitaba hacer algo similar para direcciones como

800 SE 20 AVENIDA #603, DEERFIELD BEACH

9801 NW 3 CALLE APT 5, PLANTACIÓN

11909 GLENMORE DRIVE #4-1, 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 del estado para mi caso). Pruébalo aquí
https://regex101.com/r/OsvOxn/3

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad