Diez minutos para empezar con expresiones regulares en Python

Hay tres funciones comunes de las expresiones regulares: verificar la validez de los datos, encontrar texto que cumpla con los requisitos y cortar y reemplazar texto.

1. Metacaracteres

Los llamados metacaracteres se refieren a aquellos caracteres especiales que tienen un significado especial en las expresiones regulares.

Los metacaracteres se dividen aproximadamente en las siguientes categorías: los que representan un único carácter especial, los que representan espacios en blanco, los que representan un cierto rango, los que representan tiempos y los que representan afirmaciones.

1.1 Caracteres individuales especiales

El punto inglés (.) representa cualquier carácter que no sea un salto de línea, \d representa cualquier dígito, \w representa cualquier dígito o letra o guión bajo, y \s representa cualquier carácter de espacio en blanco. Además, hay tres \D, \W y \S correspondientes, que representan respectivamente el significado opuesto del original.

import re

#匹配所有数字

txt = "123d5sdf23"
result = re.findall('\d', txt)
print(result)
#输出:['1', '2', '3', '5', '2', '3']
#匹配所有的数字、字母和下划线

txt = 'sdfw234_sdf12'
result = re.findall('\w', txt)
print(result)
#输出:['s', 'd', 'f', 'w', '2', '3', '4', '_', 's', 'd', 'f', '1', '2']

1.2 Carácter de espacio en blanco

Los diferentes sistemas tienen diferentes "saltos de línea" predeterminados al final de cada línea de texto. Por ejemplo, en Windows es \r\n, en Linux y MacOS es \n

\r carácter de retorno de carro

\n carácter de nueva línea

\f carácter de avance de formulario

\t carácter de tabulación

\v carácter de tabulación vertical

\s cualquier carácter de espacio en blanco

#获取每一行的开头
f = open('hello.txt', 'r', encoding='utf-8')
txt = f.read()
print(txt)
#输出:
#小明
#小红
#小月
result = re.findall('\n\w*', txt)
print(result)
#输入:['\n小红', '\n小月']

1.3 Cuantificador

En expresiones regulares, el asterisco inglés (*) representa 0 en múltiples ocurrencias, el signo más (+) representa 1 en múltiples ocurrencias, el signo de interrogación (?) representa 0 en 1 ocurrencias y {m,n} representa ma n ocurrencias.

*: 0 a varias veces

+: 1 a varias veces

?: 0 a 1 veces

{m}: aparece m veces

{m,}: aparece al menos m veces

{m,n}: m an veces

#寻找3个数字组合
txt = '123 1 sfd 2342 aa 23g 342'
result = re.findall('\d{3}\s', txt)
print(result)
#输出:['123 ', '342 ']

4. Alcance

|: O, como ab|bc representa ab o bc

[...] selecciones múltiples, cualquier elemento entre paréntesis

[az]: une cualquier elemento individual entre az

[^...]: Negación, no puede incluir ningún elemento individual entre paréntesis


#某个资源可能以 http:// 开头,或者 https:// 开头,也可能以 ftp:// 开头
txt = 'http://www.baidu.com'
result = re.match('(https?|ftp):\/\/', txt)
print(result.span())
#输出:(0, 7)

2. Cuantificadores y avaricia

2.1 Modo codicioso

En las reglas normales, el cuantificador que expresa el grado es codicioso por defecto. En modo codicioso, intentará igualar la longitud máxima posible.

#贪婪匹配
txt = 'aaabb'
result = re.findall(r'a*', txt)
print(result)
#输出:['aaa', '', '', '']

Cuando a* coincide con la a inicial, intentará hacer coincidir tantas a como sea posible hasta que la primera letra b no cumpla con los requisitos. Coincide con tres a y obtiene una cadena vacía cada vez que coincide.

La característica del modo codicioso es igualar la máxima longitud posible.

2.2 Modo no codicioso

Si agrega un signo de interrogación en inglés (?) después del cuantificador, la expresión regular se convierte en a*?, que es el modo no codicioso.

#非贪婪匹配
txt = 'aaabb'
result = re.findall(r'a*?', txt)
print(result)
#输出:['', 'a', '', 'a', '', 'a', '', '', '']

El modo no codicioso coincidirá en el menor tiempo posible

3. Función

3.1 función encontrartodo ()

findall() La función devuelve una lista que contiene todas las coincidencias.

#findall() 这个列表以被找到的顺序包含匹配项

txt = "China is a great country"
x = re.findall("China", txt)
print(x)
#输出:['China']

3.2 función de búsqueda ()

search() La función busca una cadena en busca de una coincidencia y devuelve un objeto Match si existe una coincidencia.

Si hay varias coincidencias, solo se devuelve la primera coincidencia; si no se encuentra ninguna coincidencia, se devuelve el valor None

#search() 函数搜索字符串中的匹配项,如果存在匹配则返回 Match 对象
txt = "China is a great country"
x = re.search(r"\s", txt)

print("第一个空格位置", x.start())
#输出:第一个空格位置 5

3.3 función dividir ()

split() La función devuelve una lista donde la cadena se divide en cada coincidencia:

#spilt 分割
txt = "China is a great country"
x = re.split(r"\s", txt)
print(x)
#输出:['China', 'is', 'a', 'great', 'country']

Controle el número de apariciones especificando  maxsplit parámetros:

#通过指定 maxsplit 参数来控制出现次数:
txt = "China is a great country"
x = re.split(r"\s", txt, 2)
print(x)
['China', 'is', 'a great country']

3.4 función sub()

sub() La función reemplaza la coincidencia con el texto de su elección:

#sub() 函数把匹配替换为您选择的文本:
txt = "China is a great country"
x = re.sub("is", "IS", txt)
print(x)
#输出:China IS a great country

3.5 Objeto de coincidencia

Los objetos de coincidencia son objetos que contienen información sobre búsquedas y resultados.

Nota: Si no hay ninguna coincidencia, se devuelve un valor  Noneen lugar de un objeto Match.

Los objetos Match proporcionan propiedades y métodos para recuperar información sobre búsquedas y resultados:

  • span() La tupla devuelta contiene las posiciones inicial y final del partido.
  • .string Devuelve la cadena pasada a la función.
  • group() Devuelve la parte de cadena coincidente.
#正则表达式查找以大写 "C" 开头的任何单词
txt = "China is a great country"
x = re.search(r"\bC\w+", txt)
print(x.span())
#输出:(0, 5)
#打印匹配的字符串部分
print(x.group())
#输出:China

Descarga del código fuente

Si este documento no es lo suficientemente detallado, puede consultar aprender Python en diez minutos_bilibili_bilibili​

Supongo que te gusta

Origin blog.csdn.net/kan_Feng/article/details/132189886
Recomendado
Clasificación