es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Expresión regular de Python para coincidir con el nombre de la calle y el número de la casa.

Tengo una expresión regular que coincide con nombres de calles (ver demo 1) y tengo una expresión regular que coincide con posibles números de casa en Alemania (ver demo 2). Cada expresión regular funciona perfectamente bien. En el siguiente paso quiero combinar ambas expresiones regulares (nombres de calles + número de casa). En otras palabras, busco una expresión regular que coincida con ambos, nombres de calle y números de casa juntos.

He preparado una demo 3 con ejemplos. Sé que estos ejemplos no son completos si los comparas con las reglas estrictas aquí, pero es suficiente para mi caso de uso.

Dado que las expresiones regulares son un lenguaje basado en reglas, permítanme tratar de explicar las reglas en palabras:
– En Alemania, el nombre de la calle puede ser básicamente cualquier tipo de nombre. Puede haber un . o - en el medio.
– La expresión regular debe coincidir incluso con minúsculas
– Los números de casa son en la mayoría de los casos algo así como 99 o 99a. Pero intenté ser creativo y agregué algunos posibles ejemplos adicionales

Mi problema:
Tengo soluciones para cada caso por separado (ver demo 1 y 2) pero mi problema es que no sé cómo combinar dos expresiones regulares en una (ver demo 3).

Expresión regular funcional para nombres de calles:

^(?:[A-Z] \d|[^\W\d_]{2,}.?)(?:[- '’][^\W\d_]+.?)*$

Expresión regular funcional para números de casa:

^[1-9]\d{0,3} ?[a-zA-Z]?(?: ?[/-] ?[1-9]\d{0,3} ?[a-zA-Z]?)?$

Basándome en las expresiones regulares mostradas anteriormente, ¿cómo puedo combinarlas para que coincidan con mis ejemplos mostrados en demo 3?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para combinar la expresión regular para nombres de calles y números de casa y que coincida con ejemplos en [demo 3][3], puedes usar la siguiente expresión regular:

    ^(?:[A-Z] \d|[^\W\d_]{2,}\.?)(?:[- '’][^\W\d_]+\.?)* (?:[1-9]\d{0,3} ?[a-zA-Z]?(?: ?[/-] ?[1-9]\d{0,3} ?[a-zA-Z]?)?)
    

    Esta expresión regular combina la expresión regular para nombres de calles con la expresión regular para números de casa agregando un espacio entre ellos. Esto significa que la expresión regular coincidirá con un nombre de calle seguido de un espacio y luego un número de casa. La expresión regular para el nombre de calle está encerrada en un grupo que no captura (?:...) y el número de casa está encerrado en un grupo no capturado separado.

    En general, esta expresión regular coincidirá con una cadena que comienza con un nombre de calle (según lo definido por la primera expresión regular) y que está seguida por un número de casa (según lo definido por la segunda expresión regular). Esta expresión regular debería funcionar para los ejemplos proporcionados en [demo 3][3].

Comments are closed.