Pitón

Expresiones regulares usando Python 3

Expresiones regulares usando Python 3
Las expresiones regulares a menudo se ven como esta serie de jeroglíficos realmente oscuros que uno suele copiar de Internet y pegar en su código. Este hechizo misterioso muestra capacidades mágicas para encontrar patrones dentro de cadenas de texto y si lo preguntamos amablemente, incluso nos hará el favor de reemplazar un patrón dado dentro de una cadena con algo más agradable.

Por ejemplo, cuando escribe controladores para URL (y que Dios le ayude si está escribiendo uno desde cero), a menudo desea mostrar el mismo resultado independientemente del final '/' en la URL. mi.g https: // ejemplo.com / user / settings / y https: // ejemplo.com / user / settings deben apuntar a la misma página a pesar del final '/'. 

Sin embargo, no puede ignorar todas las barras diagonales, como:

  1. La barra inclinada entre 'usuario' y 'configuración', e, 'usuario / configuración'.
  2. También tendrás que tener en cuenta el '//' al principio de tu FQDN seguido de 'https'.

Entonces, se te ocurre una regla como: "Ignora solo las barras diagonales seguidas de un espacio vacío."Y si lo desea, puede codificar esa regla con una serie de declaraciones if-else. Pero eso se volverá engorroso con bastante rapidez. Puede escribir una función que diga cleanUrl () que puede encapsular esto por usted. Pero el universo pronto comenzará a lanzarte más 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.

Archivos y E / S estándar

Antes de entrar en los detalles de las expresiones regulares, vale la pena mencionar el modelo que tienen la mayoría de los sistemas para los flujos de texto. Aquí hay un breve resumen (incompleto) del mismo:

  1. El texto se procesa como una secuencia (única) de caracteres.
  2. Esta secuencia puede originarse en un archivo de texto Unicode o ASCII o desde una entrada estándar (teclado) o desde una conexión de red remota. Después del procesamiento, digamos mediante un script de expresiones regulares, la salida va a un archivo o flujo de red o la salida estándar (p.g, consola)
  3. La secuencia consta de una o más líneas. Cada línea tiene cero o más caracteres seguidos de una nueva línea.

En aras de la simplicidad, quiero que se imagine que un archivo se compone de líneas que terminan con un carácter de nueva línea. Dividimos este archivo en líneas individuales (o cadenas) cada una terminando con una nueva línea o un carácter normal (para la última línea).

Regexs y String

Una expresión regular no tiene nada que ver, en particular, con los archivos. Imagínelo como una caja negra que puede tomar como entrada cualquier cadena arbitraria de cualquier longitud (finita) y una vez que llega al final de esta cadena puede:

  1. Acepta la cuerda. En otras palabras, la cuerda partidos la expresión regular (regex).
  2. Rechaza la cuerda, yo.e, la cuerda no partido la expresión regular (regex).

A pesar de su naturaleza de caja negra, agregaré algunas restricciones más a esta máquina. Una expresión regular lee una cadena secuencialmente, de izquierda a derecha, y solo lee un carácter a la vez. Entonces una cuerda "LinuxHint" debe leerse como:

'L "i" n "u" x "H" i "n" t' [De izquierda a derecha]

Comencemos simple

El tipo de expresión regular más simplista sería buscar y hacer coincidir una cadena 'C'. La expresión regular para ello es simplemente '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, cuerda) dónde patrón es nuestra expresión regular y cuerda en la cadena de entrada dentro de la cual buscamos el patrón.

>>> volver.buscar ('C', 'Esta oración tiene una C deliberada')

La función toma el patrón 'C', lo busca en la cadena de entrada e imprime la ubicación (span) donde se encuentra dicho patrón. Esta parte de la cadena, esta subcadena es lo que coincide con nuestra expresión regular. Si no se encontró tal coincidencia, la salida sería un Ninguno objeto.

Del mismo modo, puede buscar el patrón 'expresión regular' de la siguiente manera:

>>> volver.búsqueda ("expresión regular", "Podemos usar expresiones regulares para buscar patrones.")

re.buscar (), volver.coincidir () y volver.Partido completo()

Tres funciones útiles del módulo re incluyen:

1.  re.buscar(patrón, cuerda)

Esto devuelve la subcadena que coincide con el patrón, como hemos visto anteriormente. Si no se encuentra ninguna coincidencia, Ninguno es regresado. Si varias subcadenas se ajustan a un patrón determinado, solo se informa la primera aparición.

2.  re.partido(patrón, cuerda)

Esta función intenta hacer coincidir el patrón proporcionado desde el principio de la cadena. Si encuentra una ruptura en algún lugar a mitad de camino, regresa Ninguno.

Por ejemplo,

>>> volver.coincidencia ("Joh", "John Doe")

Donde la cadena "Mi nombre es John Doe" no coincide, y por lo tanto Ninguno es regresado.

>>> imprimir (volver.match ("Joh", "Mi nombre es John Doe"))
Ninguno

3.  re.Partido completo(patrón, cuerda)

Esto es más estricto que los dos anteriores e intenta encontrar una coincidencia exacta del patrón en la cadena; de lo contrario, el valor predeterminado es Ninguno.

>>> imprimir (volver.fullmatch ("Joh", "Joh"))

# Cualquier otra cosa no coincidirá

Usaré solo el re.buscar() función en el resto de este artículo. Siempre que digo que la expresión regular acepta esta cadena, significa que athe re.buscar() La función ha encontrado una subcadena coincidente en la cadena de entrada y la ha devuelto, en lugar de Ningunoobjeto.

Caracteres especiales

Las expresiones regulares como 'John' y 'C' no son de mucha utilidad. Necesitamos caracteres especiales que tengan un significado específico en el contexto de expresiones regulares. Aquí están algunos ejemplos:

    1. ^ - Esto coincide con el comienzo de una cadena. Por ejemplo, '^ C' coincidirá con todas las cadenas que comiencen con la letra C.
    2. $ - Esto coincide con el final de la línea.
    3. . - El punto es para indicar uno o más caracteres, excepto el salto de línea.
    4. * - Esto es a cero o más carácter de lo que lo precedió. Entonces b * coincide con 0 o más ocurrencias de b. ab * coincide solo con a, ab y a
    5. + - Esto es para uno o más personajes de lo que lo precedió. Entonces b + coincide con 1 o más ocurrencias de b. ab * coincide solo con a, ab y a
    6. \ - La barra invertida se usa como secuencia de escape en las expresiones regulares. Entonces, si desea una expresión regular para buscar la presencia literal del símbolo de dólar '$' en lugar del final de la línea. Puedes escribir \ $ en una expresión regular.
    7. Se pueden usar llaves para especificar el número de repeticiones que desea ver. Por ejemplo, un patrón como ab 10 significa que la cadena a seguida de 10 b coincidirá con este patrón. También puede especificar un rango de números, como b 4,6 coincide con cadenas que contienen b repetidas de 4 a 6 veces consecutivas. El patrón para 4 o más repeticiones requeriría solo una coma al final, como b 4,
    8. Corchetes y rango de caracteres. RE como [0-9] puede actuar como un marcador de posición para cualquier dígito entre 0 y 9. De manera similar, puede tener dígitos entre uno y cinco [1-5] o para hacer coincidir cualquier letra mayúscula use [A-Z] o para cualquier letra del alfabeto, independientemente de que sea mayúscula o minúscula, use [A-z].
      Por ejemplo, cualquier cadena formada exactamente por diez dígitos coincide con la expresión regular [0-9] 10, muy útil cuando busca números de teléfono en una cadena determinada.
    9. Puede crear una declaración similar a OR, utilizando | carácter donde una expresión regular se compone de dos o más expresiones regulares, digamos, A y B. La expresión regular A | B coincide si la cadena de entrada coincide con la expresión regular A o con B.
    10. Puede agrupar diferentes expresiones regulares juntas. Por ejemplo, la expresión regular (A | B) C coincidirá con las expresiones regulares para AC y

Hay mucho más que cubrir, pero recomendaría aprender sobre la marcha en lugar de sobrecargar tu cerebro con muchos símbolos oscuros y casos extremos. En caso de duda, los documentos de Python son de gran ayuda y ahora sabe lo suficiente para seguir los documentos fácilmente.

Experiencia práctica y referencias

Si desea ver una interpretación visual de su expresión regular, puede visitar Debuggex. Este sitio genera una vista de su expresión regular en tiempo real y le permite probarla con varias cadenas de entrada.

Para saber más sobre el aspecto teórico de las expresiones regulares, es posible que desee consultar los primeros dos capítulos de Introducción a la teoría de la computación de Michael Sipser. Es muy fácil de seguir y muestra la importancia de las expresiones regulares como un concepto central de la computación en sí!

Cómo cambiar el tamaño, el color y el esquema del puntero del mouse y del cursor en Windows 10
El puntero y el cursor del mouse en Windows 10 son aspectos muy importantes del sistema operativo. Esto también se puede decir de otros sistemas opera...
Motores de juegos gratuitos y de código abierto para desarrollar juegos de Linux
Este artículo cubrirá una lista de motores de juegos de código abierto y gratuitos que se pueden usar para desarrollar juegos 2D y 3D en Linux. Existe...
Tutorial de Shadow of the Tomb Raider para Linux
Shadow of the Tomb Raider es la duodécima incorporación a la serie Tomb Raider, una franquicia de juegos de acción y aventuras creada por Eidos Montre...