Registre el proceso de Xiaobai aprendiendo el rastreador de Python (2)

Registre el proceso de Xiaobai aprendiendo el rastreador de Python (2)

Expresión regular

Caracteres especiales

^ h significa comenzar con h,. significa cualquier carácter, * significa cualquier número de veces
import re
line = 'hello 123'
#^h表示以h开头,.表示任意字符,*表示任意多次**
re_str = '^h.*'
if re.match(re_str, line):
    print('匹配成功')  # 输出:匹配成功 
$ Significa carácter final
import re
line = 'hello 123'
re_str = '.*3$' # 前面可为任意多个任意字符,但结尾必须是3
if re.match(re_str, line):
    print('匹配成功')  # 输出:匹配成功 
? Indica el modo no codicioso
import re
line = 'heeeello123'
re_str = '.*?(h.*?l).*'  # 只要()中的子串
match_obj = re.match(re_str, line)
if match_obj:
    print(match_obj.group(1)) # 输出:heeeel
                              # 如果去掉?,则输出:heeeell
+ Significa al menos una vez
import re
line = 'heeeello123'
re_str = '.*(h.+?l).*'
match_obj = re.match(re_str, line)
if match_obj:
    print(match_obj.group(1)) #输出:heeeel
{2} significa que el carácter anterior aparece dos veces
import re
line = 'heeeello123'
re_str = '.*?(e.{2}?l).*' # 匹配的是e+任意2个字符+l
match_obj = re.match(re_str, line)
if match_obj:
    print(match_obj.group(1)) # 输出:eeel
| Significa o
import re
line = 'hello123'
re_str = '((hello|heeello)123)'
match_obj = re.match(re_str, line)
if match_obj:
    print(match_obj.group(1)) # 输出:python123
[] indica que el rango de valores se da para un solo carácter
import re
line = 'hello123'
re_str = "([jhk]ello123)"  # [jhk]表示jhk中的任一个都可以
match_obj = re.match(re_str, line)
if match_obj:
    print(match_obj.group(1)) # 输出:hello123
[^] significa sin conjunto de caracteres
import re
line = 'hello123'
re_str = "([^j]ello123)" # [^j]表示不是j的都行
match_obj = re.match(re_str, line)
if match_obj:
    print(match_obj.group(1)) # 输出:hello123
\ s significa espacio \ S significa no espacio
import re
line = 'hello123 好' #字符串有空格
re_str = "(hello123\s好)"  # 匹配上空格
match_obj = re.match(re_str, line)
if match_obj:
    print(match_obj.group(1)) #输出:hello123 好
[\ u4E00- \ u9FA5] significa caracteres chinos
import re
line = 'hello 北京大学'
re_str = ".*?([\u4E00-\u9FA5]+大学)"
match_obj = re.match(re_str, line)
if match_obj:
    print(match_obj.group(1)) # 输出:北京大学
Pequeño ejemplo para extraer la fecha de nacimiento.
import re
line = 'xxx出生于2000年6月1日'
line = 'xxx出生于2000/6/1'
line = 'xxx出生于2000-6-1'
line = 'xxx出生于2000-06-01'
line = 'xxx出生于2000-06'
re_str = ".*出生于(\d{4}[年/-]\d{1,2}([月/-]|\d{1,2}|$))"
match_obj = re.match(re_str, line)
if match_obj:
    print(match_obj.group(1))

Funciones principales de la biblioteca Re:

función Descripción
investigación() Busque la primera posición de la expresión regular en una cadena y devuelva el objeto de coincidencia
revancha() Haga coincidir la expresión regular desde el principio de una cadena y devuelva el objeto de coincidencia
re.findall () Cadena de búsqueda, devuelve todas las cadenas coincidentes en el tipo de lista
re.split () Divida una cadena de acuerdo con el resultado de coincidencia de la expresión regular y devuelva el tipo de lista
re.finditer () Cadena de búsqueda, devuelve un tipo de iteración de resultado coincidente, cada elemento de iteración es un objeto de coincidencia
re.sub () Reemplazar todas las subcadenas que coincidan con las expresiones regulares en una cadena y devolver la cadena reemplazada

Tipo de representación de expresión regular:

tipo de cadena sin formato (tipo de cadena nativa):

La biblioteca re utiliza el tipo de cadena sin formato para representar expresiones regulares, expresadas como: r'text '
Por ejemplo: r' [1-9] \ d {5} '
cadena sin formato se refiere a una cadena que no contiene caracteres de escape

El tipo de cuerda es más engorroso.

Por ejemplo: '[1-9] \ d {5}'; '\ d {3} - \ d {8} | \ d {4} - \ d {7}'

当正则表达式包含转义符时,建议使用raw string类型来表示正则表达式。

revancha()

import re
ss =  'I love you, do you?'

res = re.match(r'((\w)+(\W))+',ss)
print(res.group())
I love you,

investigación()

import re
ss = 'I love you, do you?'
res = re.search(r'(\w+)(,)',ss)
#print(res)
print(res.group(0))
print(res.group(1))
print(res.group(2))

you,
you
,

No demos ejemplos para los demás.

Aplicación simple de expresiones regulares

1. Busque el resultado de tiempo en el mensaje de ping

import re
ping_ss = 'Reply from 220.181.57.216:bytes=32 time=3ms TTL=47'
res = re.search(r'(time=)(\d+\w+)+(.)+TTL',ping_ss)
print(res.group(2))
3ms

2. Se utiliza para analizar páginas web.

import re,requests
r = requests.get('https://www.baidu.com').content.decode('utf-8')
print(r)
pt = re.compile('(\<title\>)([\S\s]+)(\<\/title\>)')
print(pt.search(r).group(2))
百度一下,你就知道

Además, puede utilizar la "r" antes de la cuerda para mejorar la eficiencia.

pt = re.compile(r'(</title>)([\S\s]+)(</title>)')

Supongo que te gusta

Origin blog.csdn.net/weixin_48916816/article/details/108577444
Recomendado
Clasificación