Seleção 03 episódios do rastreador Python (módulo de análise regular explicado em linguagem simples)

Seleção 03 episódios do rastreador Python (módulo de análise regular explicado em linguagem simples)

portal de diretório de aprendizagem python


Perseguir sonhos requer paixão e ideais, e realizar sonhos requer luta e dedicação

1. Expressões regulares (introdução básica)

  • Objetivo
    1. Processar dados de texto
    2. Pesquisar, localizar e extrair conteúdo de texto é uma tarefa logicamente complexa
    3. A fim de resolver os problemas acima de forma rápida e conveniente, a tecnologia de expressão regular é produzida

  • A definição regular
    é o modo avançado de correspondência de texto. Sua essência é uma string composta por uma série de caracteres e símbolos especiais. Essa string é uma expressão regular.

  • Princípio
    Uma string é composta de caracteres comuns e caracteres com significados específicos para descrever certas regras de string, como repetição, posição, etc., para expressar um certo tipo de string específico e, em seguida, corresponder.

  • mira

  1. Familiarizado com metacaracteres de expressão regular
  2. Capaz de ler expressões regulares comuns e editar regras regulares simples
  3. Capaz de usar o módulo re para manipular expressões regulares
  • re模块官方文档
    Https://docs.python.org/zh-cn/3.8/library/re.html
  • re模块库源码
    Https://github.com/python/cpython/blob/3.8/Lib/re.py

2. Uso de metacaracteres:

以下案例若需要在python或pycharm中执行需要引入re模块

Exemplo de modelo:

import re
print(re.findall('ab',"abcdefabcd"))
 # ['ab', 'ab']

2.1 Caracteres comuns:

匹配规则:每个普通字符匹配其对应的字符
例子:re.findall('ab',"abcdefabcd")
# ['ab', 'ab']

注意事项:正则表达式在python中也可以匹配中文

2.2 Metacaracteres: | (ou relação)

匹配规则:匹配 | 两侧任意的正则表达式即可
例子:re.findall('com|cn',"www.baidu.com/www.jingdong.cn")
#['com', 'cn']

2.3 Metacaractere:. (Corresponde a um único metacaractere)

匹配规则:匹配除换行外的任意一个字符
例子:re.findall('钱天.',"钱天二,钱天三,钱天四")
# ['钱天二', '钱天三', '钱天四']

2.4 Metacaracteres: [Conjunto de caracteres]

匹配规则: 匹配字符集中的任意一个字符
表达形式: 
    [abc#!好] 表示 [] 中的任意一个字符
    [0-9],[a-z],[A-Z] 表示区间内的任意一个字符
    [_#?0-9a-z]  混合书写,一般区间表达写在后面
例子:re.findall('[aeiou]',"How are you!")
# ['o', 'a', 'e', 'o', 'u']

2,5 metacaracteres: [^ conjunto de caracteres] (corresponde ao conjunto de anti-caracteres)

匹配规则:匹配除了字符集以外的任意一个字符
例子:re.findall('[^0-9]',"Use 007 port")
#['U', 's', 'e', ' ', ' ', 'p', 'o', 'r', 't']

2.6 Metacaracteres: ^ \ A

匹配规则:匹配字符串开始位置
例子:re.findall('^Jame',"Jame,hello")
#['Jame']

2.7 Metacaracteres: $ \ Z

匹配规则:匹配目标字符串的结尾位置
例子:re.findall('Jame$',"Hi,Jame")
#['Jame']

规则技巧: ^ 和 $必然出现在正则表达式的开头和结尾处。如果两者同时出现,则中间的部分必须匹配整个目标字符串的全部内容。

2.8 Metacaracteres: *

匹配规则:匹配前面的字符出现0次或多次
例子:re.findall('ha*',"haaaaaa~~~~h!")
#['haaaaaa', 'h']

2.9 Metacaractere: +

匹配规则:匹配前面的字符出现1次或多次
例子:re.findall('[A-Z][a-z]+',"Hello World")
#['Hello', 'World']

2.10 Metacaracteres :?

匹配规则:匹配前面的字符出现0次或1次
例子:匹配手机号 re.findall('-?[0-9]+',"Jame,age:18, -26")
#['18', '-26']

2.11 Metacaracteres: {n}

匹配规则:匹配前面的字符出现n次
例子:re.findall('1[0-9]{10}',"Jame:13886495728")
#['13886495728']

2.12 Metacaracteres: {m, n}

匹配规则: 匹配前面的字符出现m-n次
例子:匹配QQ号 re.findall('[1-9][0-9]{5,10}',"QQ:1259296994") 
#['1259296994']

2.13 Metacaracteres: \ d \ D

匹配规则:\d 匹配任意数字字符,\D 匹配任意非数字字符
例子:匹配端口 re.findall('\d{1,5}',"Mysql: 3306, http:80")
#['3306', '80']

2.14 Metacaracteres: \ w \ W

匹配规则:\w 匹配普通字符,\W 匹配非普通字符
说明: 普通字符指数字,字母,下划线,汉字。
例子: re.findall('\w+',"server_port = 8888")
#['server_port', '8888']

2,15 metacaracteres: \ s \ S

匹配规则:\s 匹配空字符,\S 匹配非空字符
说明:空字符指 空格 \r \n \t \v \f 字符
例子: re.findall('\w+\s+\w+',"hello    world")
#['hello    world']

2,16 metacaracteres: \ s \ S

匹配规则:\s 匹配空字符,\S 匹配非空字符
说明:空字符指 空格 \r \n \t \v \f 字符
例子: re.findall('\w+\s+\w+',"hello    world")
#['hello    world']

2.17 Metacaracteres: \ b \ B

匹配规则:\b 表示单词边界,\B 表示非单词边界
说明:单词边界指数字字母(汉字)下划线与其他字符的交界位置。
例子:re.findall(r'\bis\b',"This is a test.")
#['is']

注意: 当元字符符号与Python字符串中转义字符冲突的情况则需要使用r将正则表达式字符串声明为原始字符串,如果不确定那些是Python字符串的转义字符,则可以在所有正则表达式前加r。

Três. Regras de correspondência

3.1 Correspondência de caracteres especiais

  • Objetivo: Se a string de destino correspondente contiver caracteres especiais de expressão regular, o metacaractere na expressão precisará ser processado quando desejar expressar seu próprio significado.

    特殊字符: . * + ? ^ $ [] () {} | \
    
  • Método de operação: adicionar \ antes do metacaractere da expressão regular, o metacaractere deve remover seu significado especial, que significa o caractere

e.g. 匹配特殊字符 . 时使用 \. 表示本身含义
In : re.findall('-?\d+\.?\d*',"123,-123,1.23,-1.23")
Out: ['123', '-123', '1.23', '-1.23']

3.2 Modo ganancioso e modo não ganancioso

  • definição

贪婪模式: 默认情况下,匹配重复的元字符总是尽可能多的向后匹配内容。比如: * + ? {m,n}

非贪婪模式(懒惰模式): 让匹配重复的元字符尽可能少的向后匹配内容。

  • O modo ganancioso é convertido para o modo não ganancioso
  • Modo ganancioso [repetição de correspondência] máximo padrão
  • O valor mínimo do modo não ganancioso, adicionado após [Match Repeat]?

Adicione o sinal '?' Após o metacaractere repetido correspondente

*  ->  *?
+  ->  +?
?  ->  ??
{
    
    m,n} -> {
    
    m,n}?
e.g.
In : re.findall(r'\(.+?\)',"(abcd)efgh(higk)")
Out: ['(abcd)', '(higk)']

Demo

import re 
# 贪婪匹配  ['《java入门到放弃》,派神:《python入门到放弃》,前端:《Html直接放弃,are you ok》']
print(re.findall('《.+》', "抓娃:《java入门到放弃》,派神:《python入门到放弃》,前端:《Html直接放弃,are you ok》"))
# 非贪婪匹配 ['《java入门到放弃》', '《python入门到放弃》', '《Html直接放弃,are you ok》']
print(re.findall('《.+?》', "抓娃:《java入门到放弃》,派神:《python入门到放弃》,前端:《Html直接放弃,are you ok》"))

3.3 Agrupamento de expressão regular

  • definição:

    Em expressões regulares, () é usado para estabelecer agrupamentos internos de expressões regulares. Os subgrupos são parte de expressões regulares e podem ser usados ​​como objetos de operação geral internos.

  • efeito:

    (1) Você pode alterar o objeto de operação dos metacaracteres como uma operação inteira.

#(1)改变 +号 重复的对象
re.search(r'(ab)+',"ababababab").group()
 #'ababababab'
#(2)改变 |号 操作对象
re.search(r'(王|李)\w{1,3}',"王者荣耀").group()
#'王者荣耀'

(2) A parte do conteúdo correspondente ao subgrupo no conteúdo que o acompanha pode ser obtida por meio de algumas desculpas na linguagem de programação

#获取url协议类型
re.search(r'(https|http|ftp|file)://\S+',"https://www.baidu.com").group(1)
  • Grupo de captura:

Você pode dar um nome ao subgrupo da expressão regular para expressar o significado do subgrupo. Este subgrupo nomeado é o grupo de captura

Formato: "(? Ppattern)"

#给子组命名为 "pig"
re.search(r'(?P<pig>ab)+',"ababababab").group('pig')
#'ab'

注意事项

  1. Uma expressão regular pode conter vários subgrupos
  2. Os subgrupos podem ser aninhados, mas não se sobrepõem ou a estrutura de aninhamento é complexa
  3. Os números de série dos subgrupos são geralmente contados de fora para dentro e da esquerda para a direita

Insira a descrição da imagem aqui

Quatro. Resumo

4.1 Princípios de Expressões Regulares

  • Correção, pode corresponder corretamente à string de destino.

  • Exclusividade, exceto que a string de destino corresponde o menos possível a outro conteúdo de forma inesperada.

  • Abrangência, levando em consideração todas as condições da string alvo, tanto quanto possível, sem omissão.

4,2普通字符集的替换

Insira a descrição da imagem aqui

4,3计数符

Insira a descrição da imagem aqui

4,4巩固提升

  1. Se você usar expressões regulares para corresponder a caracteres especiais, será necessário adicionar \ para indicar escape.
  • Caracteres especiais:. * +? ^ $ [] () () | \
  • Use ao combinar caracteres especiais. Significa seu próprio significado.
    Exemplo 1:
import re
print(re.findall('-?\d+\.?\d*',"123,-123,1.23,-1.23"))
        #['123', '-123', '1.23', '-1.23']
   例子2:
import re
s="1992年5月2日出生于中国,中国内地影视女演员-12,12.34,1/0,40%,-1.6"
r=re.findall('-?\d+\.?/?\d*%?',s) 
print(r)
#['1992', '5', '2', '-12', '12.34', '1/0', '40%', '-1.6']

2. Em linguagens de programação, as expressões regulares são frequentemente escritas usando strings nativas para evitar o problema de escape múltiplo.

 python字符串  -->    正则    -->    目标字符串
    "\\$\\d+"   解析为   \$\d+   匹配   "$100"
    "\\$\\d+"  等同于  r"\$\d+"

Acho que você gosta

Origin blog.csdn.net/weixin_38640052/article/details/107375807
Recomendado
Clasificación