Las expresiones regulares (o RE) son lenguajes de programación pequeños y altamente especializados que están integrados en Python e implementados a través del módulo re. El patrón de expresión regular se compila en una serie de códigos de bytes y luego se ejecuta mediante el motor de coincidencia escrito en C.
1. Caracteres ordinarios
Segundo, el meta personaje
1. Metacaracteres. ^ $ * +? {}
1 # Introducir regular: ingrese coincidencia difusa 2 import re 3 4 # '.' El valor predeterminado coincide con cualquier carácter excepto \ n (carácter de nueva línea), si especifica flags = re.DOTALL, luego coincide con cualquier carácter, incluida la nueva línea 5 res = re.findall ('W..l', 'Hello World !!') # ['Worl'] 6 ret = re.findall ('W..l', 'Hello W \ nrld !!', flags = re.DOTALL) # ['W \ nrl'] 7 8 # '^' coincide con el comienzo del carácter, si especifica flags = re.MULTILINE, esto también puede coincidir (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 #' $ 'coincide con el final del carácter, si especifica flags = re.MULTILINE, esto también puede coincidir ("foo $", "bfoo \ nsdfsf", banderas = re.MULTILINE) 13 res = re.findall ('a..x $', 'aaaalexauex') # ['auex'] 14 ret = re.findall ('foo $', 'bfoo \ nsdfsf', flags = re.MULTILINE ) # ['foo'] 15 16 # '*' coincide con el carácter antes del * número 0 o más veces 17 res = re.findall ("ab *", "cabb3abcbbac") # ['abb', 'ab', 'a'] 18 19 # '+' coincide con el carácter anterior 1 o más veces 20 res = re .findall ("ab +", "cabb3abcbbac") # ['abb', 'ab'] 21 22 # '?' coincide con el carácter anterior 1 o 0 veces 23 res = re.findall ("ab?", "cabb3abcbbac ") # ['' ab ',' ab ',' a '] 24 25 #' {m} 'coincide con el carácter anterior m veces, {m, n} representa el rango de tiempos coincidentes 26 res = re.findall (" a {1,3} b "," caaabb3abcbbaabc ") # ['aaab', 'ab', 'aab'] 27 res = re.findall (" a {1,3} b "," aaaab ") # [ 'aaab'] 28 29 # Conclusión : * es igual a {0, + ∞}, + es igual a {0, + ∞} ,? es igual a {0,1}, *, + ,? se recomiendan
Nota: Los '*' y '+' anteriores son coincidencias codiciosas (tantas coincidencias como sea posible), seguidas de '?' Para que sean coincidencias perezosas (la menor cantidad posible de coincidencias)
1 importación 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. El conjunto de caracteres de metacaracteres []
1 # [] Hay varios caracteres que representan la relación de sí o 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 # Los metacaracteres se colocan en [] , Cancele la función especial de metacaracteres (\, ^, - excepción) 6 res = re.findall ('[w * +, $]', 'co, ma + wc $ n *') # [',', ' + ',' w ',' $ ',' * '] 7 8 # ^ Poner en [], lo 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 # -Poner en [], significa el rango 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 oblicua seguida de caracteres ordinarios para funciones especiales 17 res = re.findall ('[\ w \ d]', '13mawcCB') # ['1', '3', 'm', 'a', 'w', 'c', 'C', 'SI']
3. Caracteres de traducción de metacaracteres
1 # \ d coincide con cualquier dígito decimal, equivalente a [0-9] 2 # \ D coincide con cualquier carácter no numérico, equivalente a [^ 0-9] 3 # \ s coincide con cualquier carácter en blanco, equivalente a [\ t \ n \ r \ f \ v] 4 # \ S coincide con cualquier carácter no en blanco, equivalente a [^ \ t \ n \ r \ f \ v] 5 # \ w coincide con cualquier carácter alfanumérico, equivalente a [a-zA-Z0 -9] 6 # \ W coincide con cualquier carácter no alfanumérico, equivalente a [^ a-zA-Z0-9] 7 # \ b coincide con el límite de un carácter especial 8 9 # '\' barra invertida seguida de caracteres ordinarios Función 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 ',' I am a LI $ T ')) # [' I ',' I '] 14 15 # Barra invertida seguida de la función especial de eliminación de metacaracteres 16 print (re.findall ('a \.', 'A.jk')) # ['a.'] 17 print (re.findall ('a \ + ',' a + jk ')) # [' a + ']
Veamos la coincidencia de la barra invertida "\" de la siguiente manera:
1 # Barra invertida \ 2 print (re.findall ('c \ l', 'abc \ le')) # Informe de error 3 print (re.findall ('c \\ l', 'abc \ le')) # Informe de error 4 print (re.findall ('c \\\\ l', 'abc \ le')) # ['c \\ l'] 5 print (re.findall (r'c \\ l ',' abc \ le ')) # [' c \\ l '] 6 7 # Debido a que \ b es significativo en la tabla ASCII, agregue r 8 print (re.findall (' \ bblow ',' blow ')) # [], No coincide con la impresión 9 (re.findall (r' \ bblow ',' golpe ')) # [' golpe ']
4. Agrupación de metacaracteres ()
1 # () agrupación, los caracteres entre paréntesis en conjunto 2 imprimen (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 '], hay grupos que solo eliminan el contenido del grupo 12 ret = re.findall (' www. (?: \ w +). com ',' www.baidu.com ') 13 print (ret) # [' www.baidu.com '], plus ?: Cancelar permiso de 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. El carácter de la tubería de metacaracteres |
1 # | Match | izquierda o | derecha carácter 2 print (re.findall ('(ab) | \ d', 'rabhdg8sd')) # ['ab', '') 3 print (re.search ('( ab) | \ d ',' rabhdg8sd '). group ()) # ab
6. Métodos comunes bajo el módulo re
1 # Método de expresión regular 2 # re.findall () # Todos los resultados se devuelven a una lista 3 # re.search () # Devuelve el primer objeto coincidente (objeto), el objeto puede llamar al método de grupo para Tome el resultado devuelto 4 # re.match () # Solo coincida al comienzo de la cadena y solo devuelva un objeto. El objeto puede llamar al método de grupo para obtener el resultado devuelto 5 # re.split () # Los caracteres coincidentes se usan como un separador de lista Fu 6 # re.sub () # coincide con el carácter y reemplazar 7 # re.subn () efecto # sub y el mismo, pero al mismo tiempo será devuelto muchas veces para sustituir el 8 # re.compile () # las reglas de concordancia se compilan en un objeto Para uso posterior 9 # re.finditer () # devuelve un iterador 10 11 # findall: todos los resultados se devuelven a una lista 12 print (re.findall ('\ d', '12345')) # ['1', '2', '3', '4', '5'] 13 14 # búsqueda: coincide con el primer resultado que cumpla las condiciones 15 res = re.search ('sb', 'adssbeeesb' ) 16 print (res) # <_sre.SRE_Match object; span = (3,5), match = 'sb'> 17 print (res.group ()) # sb 18 19 # coincidencia: igual que la búsqueda, pero coincide al comienzo de la cadena 20 res = re.match ('sb', 'sbaee') 21 print (res) # <_sre.SRE_Match object; span = (0,2) , match = 'sb'>, si no coincide, devuelve None 22 print (res.group ()) # sb 23 24 # split: el carácter coincidente se usa como un 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: unir caracteres y reemplazar 33 res = re.sub ('a..x', 's..b', 'eealexbb') 34 print (res) # ees ..bbb 35 res = re.sub ('ab', '123', 'ablexbab', 1) # El último parámetro es reemplazar varias veces 36 print (res) # 123lexbab 37 38 # subn: El efecto es el mismo que sub, devuelve una tupla, además del resultado devuelto, y cuántas veces ha sido reemplazado 39 res = re.subn ('a..x', 's..b', 'eealexbb ') 40 print (res) # (' ees..bbb ', 1) 41 res = re.subn (' ab ',' 123 ',' ablexbab ') # El último parámetro es reemplazar varias veces 42 print (res) # ('123lexb123', 2) 43 44 # compilar: compila la regla de coincidencia en un objeto para su uso posterior 45 obj = re.compile ('\. Com') # compila la regla de coincidencia en un 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: devuelve un iterador 52 res = re.finditer (' \ d ',' 12345 ') 53 print (res) # <objeto callable_iterator en 0x000001E98FE4D7B8> 54 para i en res: 55 print (i.group ()) 56 # 1 57 # 2 58 # 3 59 # 4 60 # 5