[python re paquete] tutorial de expresiones regulares

que es una expresion regular

Las expresiones regulares (expresiones regulares) son una representación simbólica que utiliza símbolos limitados para representar un patrón de coincidencia de cadenas, de modo que se puedan reconocer y procesar patrones más complejos. En el contexto del desarrollo gradual de la tecnología nlp, el procesamiento de datos de origen se está volviendo cada vez más importante y se deben dominar las expresiones regulares. Muchos lenguajes, como python java perl, admiten el procesamiento de expresiones regulares a través de algunas funciones. Este artículo solo habla de la biblioteca re de python.

Cómo escribir expresiones regulares

Una expresión regular es esencialmente una cadena, lo mismo que el código, excepto que el código de python se envía al intérprete de python y la cadena de expresión regular se envía al motor re. Basándonos en esta esencia, podemos escribir nuestra primera expresión regular:

pattern = '123' # 正则表达式
sentence = 'first123rear'
re.search(pattern, sentence)

Si observa las expresiones regulares escritas por otras personas, a veces encontrará que la suya patternno es una cadena simple, sino que tiene una r delante . En concreto, algo como esto.

pattern = r'123'

Esta `r`` significa raw , de hecho, si nuestra expresión regular no tiene *** , no hay diferencia si existe esta r o no. Sin embargo, sabemos que este símbolo tiene un estado especial en python, llamado carácter de escape.Si queremos expresar *** en una cadena ordinaria , en realidad escribiremos dos, así:

example = '\\something'

Además, necesitamos comprender el flujo de trabajo específico de re en python:

  • Todo el código, incluidas las expresiones regulares, se envía al intérprete de Python
  • El patrón se envía al motor re
  • expresión compilada de motor re

Habrá un problema aquí. Para el motor re, \ también es un carácter de escape. En otras palabras, si desea hacer coincidir un \, debe asegurarse de que la expresión regular sea así cuando se envíe al motor re: \\. Pero el problema es que cuando se envía al intérprete de python en el primer paso, \\ se ha entendido como \, lo que significa que la expresión regular enviada al motor re tiene solo un \, y se produce un error desconocido. Por ejemplo: sre_constants.error: mal escape (fin de patrón) en la posición 0
Para resolver este problema, hay dos formas

  1. Se escribe como una cadena tradicional '\\\\', de modo que se interpretará como **\** al pasar el primer paso del intérprete de python, para que se envíe al re motor de la manera correcta.
  2. Use cadenas sin procesar, las cadenas sin procesar no se dejarán engañar por el intérprete de python, lo que escribe es lo que escribe, en otras palabras, la suma r'\\'es '\\\\'equivalente, generalmente estamos acostumbrados a expresar cadenas sin procesar por conveniencia.

expresiones de uso comun

[]

Los corchetes expresan un conjunto, con los caracteres como unidad básica. Por ejemplo:

pattern = re.compile(r'fa[rsfa]t')
pattern.search('fart')

Específicamente, el significado de esta expresión es: Estoy buscando una cadena que comience con fa , termine con t y tenga cualquier carácter de rsfa en el medio. De hecho, esta expresión puede coincidir con: cuatro cadenas: fart, fast, faft, faat.
Además, entre paréntesis, hay algunas expresiones especiales, como:
[0-9], [a-z], '[A-Z]', que se dividen en cualquier número, letra minúscula y letra mayúscula. Por supuesto, también se puede escribir así: , que se [0-9a-zA-Z]usa para expresar cualquier número y letra

.

Este punto es el significado de un comodín, que coincide con cualquier carácter, excepto el carácter de nueva línea **\n**

\w \w

\w == [0-9a-zA-Z_], incluidos todos los números y letras más el guión bajo
\W representa todos los caracteres que no son estos

\d \D

\d == [0-9] coincide con un dígito
\D representa un no dígito

\s\S

\s representa cualquier carácter en blanco, como un espacio, \t, \n
\S representa cualquier carácter que no esté en blanco

^ \A

Representa los siguientes caracteres como la cadena inicial,

pattern = re.compile(r'^in')
pattern.search('instant')

\A y ^ son básicamente lo mismo, son reemplazos, pero son ligeramente diferentes en el modo multilínea

$ \Z

al carácter precedente con el que termina la tabla

pattern = re.compile(r'tant$')
pattern.search('instant')

Del mismo modo, los dos son ligeramente diferentes en el modo multilínea. Además, \Z también coincidirá con una nueva línea, es decir,

pattern = re.compile(r'tant\Z')
pattern.search('instant\n')

\b \B

b significa límite, que significa límite, solo puede aparecer al principio o al final de una expresión regular y puede coincidir con caracteres como espacios, puntos y corchetes

pattern = re.compile(r'\bstant')
pattern.search('in stant')
pattern.search('instant')

\B coincide con no límite

*

Representa cualquier número de ocurrencias del carácter anterior, incluido cero

+

La expresión anterior aparece al menos una vez.

?

La expresión anterior aparece 0, 1 veces

Supongo que te gusta

Origin blog.csdn.net/Petersburg/article/details/126676452
Recomendado
Clasificación