[Aprendendo em Python] Expressões regulares

Expressões regulares (ou REs) são pequenas linguagens de programação altamente especializadas, incorporadas ao Python e implementadas por meio do módulo re. O padrão de expressão regular é compilado em uma série de bytecodes e, em seguida, executado pelo mecanismo correspondente escrito em C.

1. Caracteres comuns

Segundo, o meta caractere

1. Metacaracteres. ^ $ * +? {}

Copiar código
1 # Introduzir regular: insira a correspondência difusa 
 2 import re 
 3 
 4 # '.' O padrão corresponde a qualquer caractere, exceto \ n (caractere de nova linha), se você especificar flags = re.DOTALL, corresponda a qualquer caractere, incluindo a nova linha 
 5 = re.findall ('W..l', 'Olá Mundo !!') # ['Worl'] 
 6 ret = re.findall ('W..l', 'Olá W \ nrld !!', sinalizadores = re.DOTALL) # ['W \ nrl'] 
 7 
 8 # '^' corresponde ao início do caractere, se você especificar flags = re.MULTILINE, isso também poderá corresponder (r "^ a", "\ nabc \ neee", flags = re.MULTILINE) 
 9 res = re.findall ('^ h ... o', 'hjaookhello') # ['hjaoo'] 
10 ret = re.findall (r '^ a', '\ nabc \ neee ', flags = re.MULTILINE) # [' a '] 
11 
12 #' $ 'corresponde ao final do caractere, se você especificar flags = re.MULTILINE, isso também poderá corresponder ("foo $", "bfoo \ nsdfsf", flags = re.MULTILINE) 
13 res = re.findall ('a..x $', 'aaaalexauex') # ['auex'] 
16 # '*' corresponde ao caractere antes do * número 0 ou mais vezes 
14 ret = re.findall ('foo $', 'bfoo \ nsdfsf', flags = re.MULTILINE ) # ['foo']
15
17 res = re.findall ("ab *", "cabb3abcbbac") # ['abb', 'ab', 'a'] 
18 
19 # '+' corresponde ao caractere anterior 1 ou mais vezes 
20 res = re. findall ("ab +", "cabb3abcbbac") # ['abb', 'ab'] 
21 
22 # '?' corresponde ao caractere anterior 1 ou 0 vezes 
23 res = re.findall ("ab?", "cabb3abcbbac" ) # ['ab', 'ab', 'a'] 
24 
25 # '{m}' corresponde ao caractere anterior m vezes, {m, n} representa o intervalo de tempos correspondentes 
26 res = re.findall ("a {1,3} b "," caaabb3abcbbaabc ") # ['aaab', 'ab', 'aab'] 
27 res = re.findall (" a {1,3} b "," aaaab ") # [' aaab '] 
28 
29 # Conclusão : * é igual a {0, + ∞}, + é igual a {0, + ∞} ,? é igual a {0,1}, *, + ,? são recomendados
Copiar código

Nota: Os '*' e '+' anteriores são correspondências gananciosas (o maior número possível de correspondências), seguidas de '?' Para torná-las correspondências preguiçosas (o menor número possível de correspondências)

1 importação re 
2 res = re.findall ("ab +", "abbbbb") # ['abbbbb'] 
3 res = re.findall ("ab *", "abbbbb") # ['abbbbb'] 
4 res = re .findall ("ab +?", "abbbbb") # ['ab'] 
5 res = re.findall ("ab *?", "abbbbb") # ['a']

2. O conjunto de caracteres de metacaracteres []

Copiar código
1 # [] Existem vários caracteres que representam a relação de yes ou 
 2 res = re.findall ('c [on] m', 'comaxcnm') # ['com', 'cnm'] 
 3 res = re.findall ( '[az]', 'comaxcn') # ['c', 'o', 'm', 'a', 'x', 'c', 'n'] 
 4 
 5 # Metacaracteres são colocados em [] , Cancele a função especial de metacaracteres (\, ^, - exceção) 
 6 res = re.findall ('[w * +, $]', 'co, ma + wc $ n *') # [',', ' + ',' w ',' $ ',' * '] 
 7 
 8 # ^ Coloque [], o que significa inverso 
 9 res = re.findall (' [^ t] ',' atxmetu ') # [' a ',' x ',' m ',' e ',' u '] 
10 res = re.findall (' [^ tx] ',' atxmetu ') # [' a ',' m ',' e ' , 'u'] 
11 
12 # - 
Coloque [], significa o intervalo 13 res = re.findall ('[1-9a-z] ',' 13mawcCB ') # [' 1 ',' 3 ',' m ',' a ',' w ',' c '] 
14 res = re.findall (' [1- 9a-zA-Z] ',' 13mawcCB ') # [' 1 ',' 3 ',' m ',' a ',' w ',' c ',' C ',' B '] 
15 
16 # reverse Barra seguida por caracteres comuns para funções especiais
17 res = re.findall ('[\ w \ d]', '13mawcCB') # ['1', '3', 'm', 'a', 'w', 'c', 'C', 'B']
Copiar código

3. Caracteres de tradução de metacaracteres

Copiar código
1 # \ d corresponde a qualquer dígito decimal, equivalente a [0-9] 
 2 # \ D corresponde a qualquer caractere não numérico, equivalente a [^ 0-9] 
 3 # \ s corresponde a qualquer caractere em branco, equivalente a [\ t \ n \ r \ f \ v] 
 4 # \ S corresponde a qualquer caractere que não esteja em branco, equivalente a [^ \ t \ n \ r \ f \ v] 
 5 # \ w corresponde a qualquer caractere alfanumérico, equivalente a [a-zA-Z0 -9] 
 6 # \ W corresponde a qualquer caractere não alfanumérico, equivalente a [^ a-zA-Z0-9] 
 7 # \ b corresponde ao limite de um caractere especial 
 8 
 9 # '\' barra invertida seguida por caracteres comuns Função especial 
10 print (re.findall ('\ d {5}', 'ae12345cw67890')) # ['12345', '67890'] 
11 print (re.findall ('\ sasd', 'fak asd')) # ['asd'] 
12 print (re.findall ('\ w', 'fak asd')) # ['f', 'a', 'k', 'a', 's', 'd'] 
13 print (re.findall (r'I \ b ',' eu sou um LI $ T ')) # [' I ',' I '] 
14 
15 # Barra invertida seguida pela função especial de remoção de metacaracteres 
16 print (re.findall ('a \.', 'A.jk')) # ['a.'] 
17 print (re.findall ('a \ + ',' a + jk ')) # [' a + ']
Copiar código

Vejamos a correspondência da barra invertida "\" da seguinte maneira:

Copiar código
1 # Corresponder barra invertida \ 
2 print (re.findall ('c \ l', 'abc \ le')) # 
Relatar erro 3 print (re.findall ('c \\ l', 'abc \ le')) # 
Report error 4 print (re.findall ('c \\\\ l', 'abc \ le')) # ['c \\ l'] 
5 print (re.findall (r'c \\ l ',' abc \ le ')) # [' c \\ l '] 
6 
7 # Como \ b é significativo na tabela ASCII, adicione r 
8 print (re.findall (' \ bblow ',' blow ')) # [], Não corresponde a 
9 print (re.findall (r' \ bblow ',' blow ')) # [' blow ']
Copiar código

4. Agrupamento de metacaracteres ()

Copiar código
1 # () agrupamento, os caracteres entre colchetes como um todo 
 2 imprimem (re.findall ('(as)', 'jdkasas')) # ['as', 'as'] 
 3 
 4 res = re.search (' (? P <id> \ d {3}) / (? P <name> \ w {3}) ',' weeew34ttt123 / ooo ') 
 5 print (res.group ()) # 123 / ooo 
 6 print (res .group ('id')) # 123 
 7 print (res.group ('name')) # ooo 
 8 
 9 # findall 
10 res = re.findall ('www. (\ w +) .com', 'www.baidu .com ') 
11 print (res) # [' baidu '], existem grupos para remover apenas o conteúdo do grupo 
12 ret = re.findall (' www. (?: \ w +). com ',' www.baidu.com ') 
13 print (ret) # [' www.baidu.com '], mais ?: Cancela a permissão do grupo 
14 
15 # search 
16 res = re.search (' www. (\ W +). Com ',' www. baidu.com ') 
17 print (res.group ()) # www.baidu.com, diferente de findall
Copiar código

5. O caractere de pipe dos metacaracteres |

1 # | Corresponder | caractere esquerdo ou | direito 
2 print (re.findall ('(ab) | \ d', 'rabhdg8sd')) # ['ab', '') 
3 print (re.search ('( ab) | \ d ',' rabhdg8sd '). group ()) # ab

6. Métodos comuns no módulo re

Copiar código
1 # Método de expressão regular 
 2 # re.findall () # Todos os resultados são retornados a uma lista 
 3 # re.search () # Retorna o primeiro objeto correspondente (objeto), o objeto pode chamar o método de grupo para Pegue o resultado de retorno 
 4 # re.match () # Corresponde apenas no início da string e retorne apenas um 
 objeto.O objeto pode chamar o método group para obter o resultado de retorno 5 # re.split () # Os caracteres correspondentes são usados ​​como separador de lista Fu 
 6 # re.sub () # coincidir com o personagem e substituir 
 7 # re.subn () # sub efeito e o mesmo, mas ao mesmo tempo será devolvido muitas vezes para substituir o 
 8 # re.compile () # as regras de correspondência são compilados em um objeto Para uso posterior, 
 9 # re.finditer () # retorna um iterador 
10 
11 # findall: todos os resultados são retornados para uma lista 
12 print (re.findall ('\ d', '12345')) # ['1', '2', '3', '4', '5'] 
13 
14 # search: corresponde ao primeiro resultado que atenda às condições 
15 res = re.search ('sb', 'adssbeeesb' ) 
16 print (res) # <objeto _Sre.SRE_Match; span = (3,5), match = 'sb'>
17 print (res.group ()) # sb 
18
19 # match: igual à pesquisa, mas corresponde ao início da string 
20 res = re.match ('sb', 'sbaee') 
21 print (res) # <_sre.SRE_Match objeto; span = (0,2) , match = 'sb'>, se não for correspondido, ele retornará Nenhum 
22 print (res.group ()) # sb 
23 
24 # split: o caractere correspondente é usado como um separador de lista 
25 res = re.split ('k', ' djksal ') 
26 print (res) # [' dj ',' sal '] 
27 res = re.split (' [j, s] ',' dsejksal ') 
28 print (res) # [' d ',' e ',' k ',' al '] 
29 res = re.split (' [j, s] ',' sejksal ') 
30 print (res) # [' ',' e ',' k ',' al ' ] 
31 
32 # sub: Corresponde caracteres e substitua 
33 res = re.sub ('a..x', 's..b', 'eealexbb') 
34 print (res) # ees ..bbb 
35 res = re.sub ('ab', '123', 'ablexbab', 1) # O último parâmetro é substituir várias vezes 
36 print (res) # 123lexbab 
37
38 # subn: O efeito é o mesmo que sub, retorna uma tupla, além do resultado retornado e quantas vezes foi substituído 
39 res = re.subn ('a..x', 's..b', 'eealexbb ') 
40 print (res) # (' ees..bbb ', 1) 
41 res = re.subn (' ab ',' 123 ',' ablexbab ') # O último parâmetro é substituir várias vezes 
42 print (res) # ('123lexb123', 2) 
43 
44 # compilação: compila a regra de correspondência em um objeto para uso posterior 
45 obj = re.compile ('\. Com') # compila a regra de correspondência em um objeto 
46 res = obj .findall ('fajs.comeee') 
47 ret = obj.findall ('aa.comss.com') 
48 print (res) # ['.com'] 
49 print (ret) # ['.com', '. com '] 
50 
51 # finditer: retorna um iterador 
52 res = re.finditer (' \ d ',' 12345 ') 
53 print (res) # <objeto callable_iterator em 0x000001E98FE4D7B8> 
54 para i em res: 
55 print (i.group ()) 
56 # 1
57 # 2
58 # 3 
59 # 4 
60 # 5

Acho que você gosta

Origin www.cnblogs.com/gtea/p/12715270.html
Recomendado
Clasificación