| You are here: Inicio > Inmersión en Python > Expresiones regulares > Expresiones regulares prolijas | << >> | ||||
Inmersión en PythonPython de novato a experto |
|||||
Hasta ahora sólo hemos tratado con lo que llamaremos expresiones regulares “compactas”. Como ha visto, son difíciles de leer, e incluso si uno sabe lo que hace, eso no garantiza que seamos capaces de comprenderlas dentro de seis meses. Lo que estamos necesitando es documentación en línea.
Python le permite hacer esto con algo llamado expresiones regulares prolijas. Una expresión regular prolija es diferente de una compacta de dos formas:
Esto quedará más claro con un ejemplo. Volvamos sobre la expresión regular compacta con la que hemos estado trabajando, y convirtámosla en una prolija. Este ejemplo le muestra cómo.
>>> pattern = """ ^ # beginning of string M{0,4} # thousands - 0 to 4 M's (CM|CD|D?C{0,3}) # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's), # or 500-800 (D, followed by 0 to 3 C's) (XC|XL|L?X{0,3}) # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's), # or 50-80 (L, followed by 0 to 3 X's) (IX|IV|V?I{0,3}) # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's), # or 5-8 (V, followed by 0 to 3 I's) $ # end of string """ >>> re.search(pattern, 'M', re.VERBOSE)<_sre.SRE_Match object at 0x008EEB48> >>> re.search(pattern, 'MCMLXXXIX', re.VERBOSE)
<_sre.SRE_Match object at 0x008EEB48> >>> re.search(pattern, 'MMMMDCCCLXXXVIII', re.VERBOSE)
<_sre.SRE_Match object at 0x008EEB48> >>> re.search(pattern, 'M')
![]()
| Lo más importante que ha de recordar cuando use expresiones regulares prolijas es que debe pasar un argumento extra cuando trabaje con ellas: re.VERBOSE es una constante definida en el módulo re que indica que un patrón debe ser tratado como una expresión prolija. Como puede ver, este patrón tiene bastante espacio en blanco (que se ignora por completo), y varios comentarios (que también se ignoran). Una vez ignorado el espacio en blanco y los comentarios, es exactamente la misma expresión regular que vimos en la sección anterior, pero es mucho más legible. | |
| Esto coincide con el inicio de la cadena, luego una de cuatro posibles M, despuéscon CM, L y tres de tres X, IX, y el final de la cadena. | |
| Esto coincide con el principio de la cadena, las cuatro posibles M, D y tres de tres C, L y las tres posibles X, V y las tres I disponibles, y el final de la cadena. | |
| Esto no coincide. ¿Por qué? Porque no tiene el indicador re.VERBOSE, de manera que la función re.search está tratando el patrón como una expresión regular compacta, donde los espacios y las marcas # tienen significado. Python no puede detectar por sí solo si una expresión regular es prolija o no. Python asume que cada expresión es compacta a menos que le indice explícitamente que es prolija. |
<< Uso de la sintaxis {n,m} |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
Caso de estudio: análisis de números de teléfono >> |