Python3 expresiones regulares: principiante de Xiaobai


Prefacio

¡Hola! Este es mi primer blog, ¡por supuesto por tarea! En el proceso de consultar documentos, leer blogs escritos por otros y, por supuesto , comenzar por mí mismo , tengo una comprensión preliminar de la gramática básica de las expresiones regulares y cómo usarlas, por lo que escribiré una nota de estudio para resumir. . Como principiante, los errores son inevitables. Bienvenido a señalarlos.


Introducción

1. Introducción

Cuando el maestro introdujo expresiones regulares, dio un ejemplo: escribimos un artículo en el mundo, pero encontramos que cierta palabra estaba mal, ¿es necesario encontrar una y cambiarla? ¡No! La función de buscar y reemplazar es fácil de resolver.

Inserte la descripción de la imagen aquí

2. ¿Qué es la expresión regular?

Esta función de búsqueda y reemplazo es similar a las expresiones regulares.
La expresión regular es en realidad una cadena. Dando una expresión regular y otra cadena, podemos lograr los siguientes objetivos: ①. Si la cadena dada puede ser consistente con la expresión regular. ②. A través de expresiones regulares, podemos obtener la parte específica que queremos de la cadena.
Las expresiones regulares son una herramienta poderosa para el procesamiento de cadenas, pero no son exclusivas de Python. Otros lenguajes también las tienen.

Empecemos a aprender expresiones regulares de la gramática básica.

Sintaxis de expresiones regulares

1. Conocimientos básicos: metacaracteres

  • Metacaracteres

    Algunos caracteres son especiales, no coinciden con ellos mismos, pero indican que deben combinarse con algunas cosas especiales o afectarán el número de repeticiones. Estos caracteres especiales se denominan metacaracteres.
  • Cadena original

    Agregue la letra ro R delante de la cadena para indicar la cadena original Todos los caracteres tienen el significado original sin ningún escape. La implementación de esta función es muy similar a las expresiones regulares

2. Metacaracteres de uso común

2.1 Conjuntos de caracteres coincidentes de longitud variable

"." :
Representa cualquier carácter excepto los saltos de línea.
Un símbolo similar (pero no igual) a "." Es "\ S", lo que significa cualquier carácter que no sea un carácter en blanco.

El código es el siguiente (ejemplo):

import re
s='hi,i am a student.my name is Tom'
print(re.findall(r'.',s))

resultado de la operación

['h', 'i', ',', 'i', ' ', 'a', 'm', ' ', 'a', ' ', 's', 't', 'u', 'd', 'e', 'n', 't', '.', 'm', 'y', ' ', 'n', 'a', 'm', 'e', ' ', 'i', 's', ' ', 'T', 'o', 'm']

② "/"

Se pueden agregar diferentes caracteres después de la barra invertida para indicar diferentes significados especiales.
"^" Significa complemento, caracteres coincidentes que no están en el rango,
por ejemplo: [^ 3] significa caracteres distintos de 3.

personaje significado
\segundo Coincide con el principio o el final de una palabra
\SEGUNDO Al contrario de \ b, coincide con el principio o el final que no son palabras
\re Coincide con cualquier número decimal; equivalente a [0-9]
\RE \ d Por el contrario, coincide con cualquier carácter que no sea un dígito, equivalente a [^ 0-9]
\ s Coincide con cualquier carácter en blanco, equivalente a [\ t \ n \ r \ f \ v]
\ S Al contrario que \ s, coincide con cualquier carácter que no esté en blanco, equivalente a [^ \ t \ n \ r \ f \ v]
\ w Coincide con cualquier letra, número o carácter de subrayado, equivalente a [a-zA-Z0-9_]
\ W Coincide con cualquier carácter que no sea una letra, un número y un subrayado, equivalente a [^ a-zA-Z0-9_]

También se puede utilizar para cancelar todos los metacaracteres:
estos caracteres especiales se pueden incluir en [].

"^" :
coincide con el comienzo de la línea, coincide con la cadena que comienza con el carácter que sigue a ^

El código es el siguiente (ejemplo):

import re
s='helloTom BabyhelloMary helo'
print(re.findall(r'hello',s))

resultado de la operación

['hello', 'hello']

"$" :
coincide con el final de la línea, coincide con la cadena que termina con el carácter anterior

El código es el siguiente (ejemplo):

s='helloTom BabyhelloMary helo'
print(re.findall(r'lo',s))

resultado de la operación

['lo', 'lo', 'lo']

"[]" :
A menudo se usa para especificar un conjunto de caracteres, por ejemplo: [abc], [az], [0-9]; los
metacaracteres no funcionan entre corchetes, por ejemplo: [akm $] y [m.] Ninguno de los metacaracteres chinos funciona.

El código es el siguiente (ejemplo):

s='abc acd abc'
print(re.findall(r'a[bc]\D*',s))
print(re.findall(r'a[^b]',s))

resultado de la operación

['abc acd abc']
['ac']

2.2 Caracteres que especifican el número de repeticiones

"*" :
Coincide con 0 o más ocurrencias del carácter o subpatrón antes de *

El código es el siguiente (ejemplo):

s='aab abb abbbb b a'
print(re.findall(r'ab*',s))

resultado de la operación

['a', 'ab', 'abb', 'abbbb', 'a']

"+" :
Coincide con una o más ocurrencias del carácter o subpatrón antes de +

El código es el siguiente (ejemplo):

s='aab abb abbbb b a'
print(re.findall(r'ab+',s))

resultado de la operación

['ab', 'abb', 'abbbb']

"?" : ¿
Coincide con 0 o 1 caracteres antes?
Cuando "?" Sigue inmediatamente a otros calificadores (*, +, {n}, {n,}, {n, m}), el patrón coincidente Es "no codicioso".
El patrón "no codicioso" coincide con la cadena más corta posible, mientras que el patrón "codicioso" predeterminado coincide con la cadena más larga posible.
El código es el siguiente (ejemplo):

s='a ab abbbbb abbbbbxa'
print(re.findall(r'ab+',s))
print(re.findall(r'ab+?',s))

resultado de la operación

['ab', 'abbbbb', 'abbbbb']
['ab', 'ab', 'ab']

“{m, n}”

Indica que hay al menos m repeticiones y como máximo n repeticiones.
Tanto myn son números decimales.
Ignorar m significa 0 repeticiones e ignorar n significa infinitas repeticiones.

El código es el siguiente (ejemplo):

s1='12345 123567'
s2='a b baaa baaaa'
print(re.findall(r'123\d{2}',s1))
print(re.findall(r'a{1,3}',s2))

resultado de la operación

['12345', '12356']
['a', 'aaa', 'aaa', 'a']

Constantes en el módulo re

  1. re.IGNORECASE abreviatura re.l
    función: caso ignorar coincidencia
  2. re.ASCII abreviatura re.A
    función: deje \ w, \ b, \ d ... solo coincide con ASCII, no Unicode
  3. re.DOTALL abreviatura re.S
    función: coincidir con todos, incluido \ n
  4. re.MULTILINE abreviatura re.M
    Función: modo multilínea, cuando hay un carácter de nueva línea \ n en una cadena, el carácter de nueva línea no se admite en el modo predeterminado, como el principio y el final de una línea, pero sí se admite en el modo multilínea Coincide con el comienzo de la línea
  5. re.VERBOSE abreviatura re.X
    Función: Anote la expresión regular para
    Dar un ejemplo sencillo
    dar un ejemplo simple. Para
    obtener más detalles, consulte la introducción al uso constante del módulo re en la expresión regular de Python

Funciones comunes en el módulo re

1. Coincidencia de cadenas

El módulo re proporciona las funciones necesarias para operaciones de expresión regular

1.1match ()

re.match (patrón, cadena [, banderas])

La coincidencia comienza desde la primera letra. Si la cadena contiene la subcadena de patrón, la coincidencia es exitosa y se devuelve el objeto Match; si falla, se devuelve None.

El código es el siguiente (ejemplo):

import re
print(re.match(r'How','How are you'))

resultado de la operación

<re.Match object; span=(0, 3), match='How'>

1.2 búsqueda ()

re.search (patrón, cadena [, banderas])

Intente hacer coincidir todas las subcadenas de la cadena con la expresión regular.
Si ninguna de las cadenas coincide correctamente, devuelva ninguna; de lo contrario, devuelva un objeto Match.
Nota: Para varias subcadenas, solo se devuelve la primera

El código es el siguiente (ejemplo):

s1='ahello'
s2='bahello world hello'
print(re.match(s1,s2))
print(re.search(s1,s2))

resultado de la operación

None
<re.Match object; span=(1, 7), match='ahello'>

1.3 findall ()

re.findall (patrón, cadena [, banderas])

En forma de lista, se devuelven todas las subcadenas que pueden coincidir. Si no se encuentra ninguna coincidencia, se devuelve una lista vacía.

El código es el siguiente (ejemplo):

s3=r'abc'
print(re.findall(s3,'aabaab'))
print(re.findall(s3,'aabcaabc'))

resultado de la operación

[]
['abc', 'abc']

1-4 división ()

re.finditer (patrón, cadena [, banderas])

Devuelve todas las cadenas de una cadena que coinciden con el patrón y devuelve un iterador en forma de objeto Match.

1.5 Resumen

1. Encontraremos que la función findall () devuelve una lista,
mientras que las funciones match () y search () imprimen directamente muchos resultados. Por lo tanto, el método de emparejar objetos solo es adecuado para emparejar, buscar, encontrar, no encontrar todos.
2. Por ejemplo, <re.Match object; span = (0, 5), match = 'abcde'> Es el objeto match devuelto por la función, pero todo lo que queremos es el último resultado match = 'abcde', entonces Aprenderá a hacer coincidir objetos para resolver este problema.

1.6 Retorno de la cadena de destino

Use () en expresiones regulares para agrupar. group () se utiliza para proponer la cadena interceptada por el grupo.

group () es lo mismo que group (0) para que coincida con el resultado general de la expresión regular;
group (1) devuelve la primera parte de coincidencia de corchetes;
group (2) enumera la segunda parte de coincidencia de corchetes;
group (3) enumera la tercera Pieza a juego del soporte;
...

El código es el siguiente (ejemplo):

a="123abc456"
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group())
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0))
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1))
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2))
print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3))

resultado de la operación

123abc456
123abc456
123
abc
456

2. Reemplazo de cadena-re.sub

re.sub (patrón, respuesta, cadena [, recuento])

Utilice repl para reemplazar cada subcadena coincidente en la cadena y devolver la cadena reemplazada.
Cuando repl es una cadena, puede usar \ id o \ g, \ g para citar la agrupación, pero no puede usar el número 0; cuando repl es un método, este método solo debe aceptar un parámetro (Match object) y devolver un carácter La cadena se usa para reemplazo (los grupos no se pueden citar en la cadena devuelta).
count se utiliza para especificar el número máximo de reemplazos y reemplazar todos de forma predeterminada.

El código es el siguiente (ejemplo):

s1="she is a girl. she likes apples"
result = re.sub('she','he',s1,1)
print(result)

resultado de la operación

he is a girl. she likes apples

3. Cadena split-re.split ()

re.split (patrón, cadena, maxsplit)

maxsplit especifica el número máximo de divisiones; si no se especifica, todas se dividirán. Regrese para dividir la cadena en una lista de acuerdo con la subcadena coincidente

El código es el siguiente (ejemplo):

result = re.split('\d+','a111b222c33')
print (result)
db = '2020-10-121 23:23:23'
result = re.split("\W+",db)
print (result)

resultado de la operación

['a', 'b', 'c', '']
['2020', '10', '121', '23', '23', '23']

Objeto de expresión regular

Función 1.compile ()

compilar (patrón, [, banderas]

La función compile () compila el patrón de expresión regular (escrito como una cadena), lo convierte en un objeto de patrón y devuelve un objeto de expresión regular. A diferencia del modelo re.method (), usar objetos de código precompilados es más rápido que usar cadenas directamente, porque el intérprete debe compilar cadenas en objetos de código antes de ejecutar código en forma de cadenas.

Use un objeto de expresión regular para obtener una subcadena coincidente

2. Correspondencia de cadenas

Pattern.match (string [, pos [, endpos]])
Pattern.search (string [, pos [, endpos]])
Pattern.findall (string [, pos [, endpos]])

El parámetro opcional endpos define el final de la búsqueda de la cadena; asume que la longitud de la cadena llega a endpos, por lo que solo se compararán los caracteres de pos a
endpos-1. Si endpos es menor que pos, no habrá coincidencia;

Si el comienzo de la cadena puede encontrar una coincidencia de este patrón regular, se devuelve un objeto coincidente correspondiente. Si no coincide, devuelve None;

El código es el siguiente (ejemplo):

s1='abcde abcdef bcde'
pattern = re.compile(r'\w*bcd\w*')
result = pattern.match(s1)
print(result.group())

resultado de la operación

abcde

2. Reemplazo de cuerdas

Pattern.sub (repl, string, count = 0) es
equivalente a la función sub (), usando el patrón compilado

El código es el siguiente (ejemplo):

s1='abcde abcdef bcde'
pattern = re.compile(r'\s+')
result = pattern.sub('-',s1,3)
print(result)

resultado de la operación

abcde-abcdef-bcde

3. Segmentación de cadenas

Pattern.split (cadena, maxsplit = 0)

El código es el siguiente (ejemplo):

s1='a1b2c3d4ee5'
pattern = re.compile(r'\d+')
result1 = pattern.split(s1)
result2 = pattern.split(s1,3)
#只分割三次,后面不分割
print(result1)
print(result2)

resultado de la operación

['a', 'b', 'c', 'd', 'ee', '']
['a', 'b', 'c', 'd4ee5']

4. Resumen

La función compila la función en la función del módulo re, esta función se puede precompilar para devolver un objeto regular, este objeto regular tiene la misma función que el módulo re.

¿Deberíamos usar re módulo o patrón de objeto regular?
Recomendación de documento oficial: cuando se usa una expresión regular varias veces, se recomienda usar el patrón de objeto regular para aumentar la capacidad de reutilización, porque las funciones de nivel de módulo compiladas por re.compile (patrón) se almacenarán en caché.

para resumir

El viaje es largo y largo, y el profesor también dijo que la cultura de expresión regular de Python es extensa y profunda, y también necesitamos dominar el uso común.
Lo anterior es mi breve comprensión de las expresiones regulares de Python.
En el proceso de estudiar y practicar, ¡realmente me di cuenta de que la práctica puede traer conocimiento verdadero! ! ! Si tienes dudas, ¡ve a practicar! ! ! ¡Habrá una cosecha! ! !

Supongo que te gusta

Origin blog.csdn.net/m0_50316716/article/details/109190165
Recomendado
Clasificación