tutorial regular pattern online example creator compile python regex

pattern - Python Regular Expression Match todos los números de 5 dígitos pero ninguno más grande



re compile string (7)

Probablemente desee hacer coincidir un no dígito antes y después de su cadena de 5 dígitos, como [^0-9]([0-9]{5})[^0-9] . Luego, puede capturar el grupo interno (la cadena real que desea).

Estoy intentando alinear códigos de cupón de 5 dígitos distribuidos en una página web HTML. Por ejemplo, 53232 , 21032 , 21032 , etc ... Puedo manejar el caso más simple de cualquier cadena de 5 dígitos con [0-9]{5} , aunque esto también coincide con los números de 6, 7, 8 ... n dígitos. ¿Puede alguien sugerirme cómo modificaría esta expresión regular para hacer coincidir solo números de 5 dígitos?


Sin rellenar la cadena para el inicio y final de la secuencia especial, como en respuesta de se pueden usar los negativos con anticipación y mirar hacia atrás para manejar ambos casos con una sola expresión regular

>>> import re >>> s = "88888 999999 3333 aaa 12345 hfsjkq 98765" >>> re.findall(r"(?<!/d)/d{5}(?!/d)", s) [''88888'', ''12345'', ''98765'']


Tu podrías intentar

/D/d{5}/D

o tal vez

/b/d{5}/b

Aunque no estoy seguro de cómo Python trata los finales de línea y los espacios en blanco.

Creo que ^/d{5}$ no funcionaría para usted, ya que es probable que desee obtener números que se encuentren en algún lugar dentro de otro texto.


Una forma muy sencilla sería hacer coincidir todos los grupos de dígitos, como con r''/d+'' , y luego omitir cada coincidencia que no tenga una longitud de cinco caracteres al procesar los resultados.


cadena completa: ^[0-9]{5}$

dentro de una cadena: [^0-9][0-9]{5}[^0-9]


Nota: hay un problema en el uso de /D ya que /D coincide con cualquier carácter que no sea un dígito, en su lugar use /b . /b es importante aquí porque coincide con el límite de la palabra pero solo al final o al principio de una palabra.

import re input = "four digits 1234 five digits 56789 six digits 01234,56789,01234" re.findall(r"/b/d{5}/b", input) result : [''56789'', ''01234'', ''56789'', ''01234'']

pero si uno usa el resultado de re.findall (r "/ D (/ d {5}) / D", s): [''56789'', ''01234''] / D no puede manejar una coma o cualquier número ingresado continuamente.

/ b es parte importante aquí, coincide con la cadena vacía pero solo al final o al principio de una palabra.

Más documentación: https://docs.python.org/2/library/re.html

Más aclaraciones sobre el uso de /D vs /b :

Este ejemplo usa /D pero no captura todos los números de cinco dígitos.

Este ejemplo usa /b mientras captura todos los números de cinco dígitos.

Aclamaciones


>>> import re >>> s="four digits 1234 five digits 56789 six digits 012345" >>> re.findall(r"/D(/d{5})/D", s) [''56789'']

si pueden ocurrir al principio o al final, es más fácil rellenar la cadena que desordenar con casos especiales

>>> re.findall(r"/D(/d{5})/D", " "+s+" ")