Por ejemplo, cuando está escribiendo manejadores para URL (y Dios lo ayude si está escribiendo uno desde cero), entonces a menudo desea mostrar el mismo resultado independientemente de los siguientes '/' en la URL en la URL. mi.g https: // ejemplo.com/usuario/configuración/y https: // ejemplo.com/usuario/configuración debe apuntar a la misma página a pesar del final '/'.
Sin embargo, no puede ignorar todas las barras delanteras, como:
Entonces, se te ocurre una regla como: “Ignora solo las barras delanteras seguidas de un espacio vacío."Y si lo desea, puede codificar esa regla con una serie de declaraciones if-else. Pero eso se pondrá engorroso bastante rápido. Puede escribir una función que diga Cleanurl () que puede encapsular esto para usted. Pero el universo pronto comenzará a arrojarte más bolas curvas. Pronto se encontrará escribiendo funciones para CleanHeaders (), ProcessLog (), etc. O puede usar una expresión regular siempre que se requiera cualquier tipo de coincidencia de patrones.
Antes de entrar en los detalles de las expresiones regulares, vale la pena mencionar el modelo que la mayoría de los sistemas tienen para flujos de texto. Aquí hay un resumen corto (incompleto):
En aras de la simplicidad, quiero que imagine que un archivo está compuesto de líneas que terminan con un carácter nuevo. Dividimos este archivo en líneas individuales (o cadenas) cada uno que termina con una nueva línea o un carácter normal (para la última línea).
Regexs y cadena
Un regex no tiene nada, particular, que ver con los archivos. Imagínelo como un cuadro negro que puede tomar como entrada cualquier cadena arbitraria de cualquier longitud (finita) y una vez que alcanza el final de esta cadena, puede:
A pesar de su naturaleza de caja negra, agregaré algunas limitaciones más a esta maquinaria. Un regex lee una cadena secuencialmente, De izquierda a derecha, y solo lee un personaje a la vez. Entonces una cadena "Linuxhint" con ser leído como:
'L "i" n "u" x "h" i "n" t' [de izquierda a derecha]
Empecemos simple
El tipo más simplista de regex sería buscar y hacer coincidir una cadena 'c'. La expresión regular para ello es solo 'c'. Bastante trivial. La forma de hacerlo en Python requeriría que primero importe el re Módulo para expresiones regulares.
>>> importar re
Luego usamos la función RE.buscar(patrón, cadena) dónde patrón es nuestra expresión regular y cadena en la cadena de entrada dentro de la cual buscamos el patrón.
>>> Re.buscar ('c', 'Esta oración tiene una C deliberada')La función toma en el patrón 'C', lo busca en la cadena de entrada e imprime la ubicación (amplio) donde se encuentra dicho patrón. Esta parte de la cadena, esta subcadena es lo que coincide con nuestra expresión regular. Si no hubiera tal coincidencia encontrada, la salida sería un Ninguno objeto.
Del mismo modo, puede buscar el patrón 'expresión regular' de la siguiente manera:
>>> Re.búsqueda ("expresión regular", "podemos usar expresiones regulares para buscar patrones.")re.buscar (), re.Match () y RE.Partido completo()
Tres funciones útiles del módulo RE incluyen:
re.buscar(patrón, cadena)
Esto devuelve la subconjunto que coincide con el patrón, como hemos visto arriba. Si no se encuentra ninguna coincidencia, entonces Ninguno es regresado. Si múltiples subcadenas se ajustan a un patrón dado, solo se informa la primera ocurrencia.
re.fósforo(patrón, cadena)
Esta función intenta coincidir con el patrón suministrado desde el comienzo de la cadena. Si se encuentra con un descanso en algún lugar a mitad de camino, regresa Ninguno.
Por ejemplo,
>>> Re.Match ("Joh", "John Doe")Donde como la cadena "mi nombre es John Doe" no es un partido, y por lo tanto Ninguno es regresado.
>>> imprimir (RE.Match ("Joh", "Mi nombre es John Doe"))re.Partido completo(patrón, cadena)
Esto es más estricto que el anterior e intenta encontrar una coincidencia exacta del patrón en la cadena, de lo contrario, predeterminado a Ninguno.
>>> imprimir (RE.Fullmatch ("Joh", "Joh"))Estaré usando solo el re.buscar() función en el resto de este artículo. Cada vez que digo que el Regex acepta esta cadena, significa que ATE re.buscar() La función ha encontrado una subcadena coincidente en la cadena de entrada y ha devuelto eso, en lugar de Ningunoobjeto.
Caracteres especiales
Las expresiones regulares como 'John' y 'C' no son de gran uso. Necesitamos caracteres especiales que una media específica en el contexto de expresiones regulares. Aquí están algunos ejemplos:
Hay mucho más que cubrir, pero recomendaría aprender a medida que avanza en lugar de sobrecargar su cerebro con muchos símbolos y casos de borde oscuros. En caso de duda, los documentos de Python son de gran ayuda y ahora sabes lo suficiente como para seguir los documentos fácilmente.
Si desea ver una interpretación visual de su regex, puede visitar DebugGex. Este sitio genera una vista de su regex en tiempo real y le permite probarlo con varias cadenas de entrada.
Para saber más sobre el aspecto teórico de las expresiones regulares, es posible que desee ver los primeros dos capítulos de introducción a la teoría de la computación por Michael Sipser. Es muy fácil de seguir y muestra la importancia de las expresiones regulares como un concepto central de cálculo en sí mismo!