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. ^ $ * +? {}
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
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 []
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']
3. Caracteres de tradução de metacaracteres
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 + ']
Vejamos a correspondência da barra invertida "\" da seguinte maneira:
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 ']
4. Agrupamento de metacaracteres ()
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
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
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