Python expresión regular
Python RegEx
En este tutorial, aprenderá sobre expresiones regulares (RegEx) y utilizará el módulo re de Python para trabajar con RegEx (con la ayuda de ejemplos).
Un registro ular Ex pression (RegEx) es una secuencia de caracteres que define un patrón de búsqueda. Por ejemplo,
^a...s$
El código anterior define un patrón RegEx. El patrón es:cualquier cadena de cinco letras que comience con a y terminando en s .
Un patrón definido mediante RegEx se puede utilizar para compararlo con una cadena.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
^a...s$ | abs | Sin coincidencia |
alias | Coincidencia | |
abyss | Coincidencia | |
Alias | Sin coincidencia | |
An abacus | Sin coincidencia |
Python tiene un módulo llamado re
para trabajar con RegEx. He aquí un ejemplo:
import re
pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)
if result:
print("Search successful.")
else:
print("Search unsuccessful.")
Aquí, usamos re.match()
función para buscar patrón dentro de la test_string . El método devuelve un objeto coincidente si la búsqueda tiene éxito. Si no, devuelve None
.
Hay otras varias funciones definidas en el re módulo para trabajar con RegEx. Antes de explorar eso, aprendamos sobre las expresiones regulares.
Si ya conoce los conceptos básicos de RegEx, salte a Python RegEx.
Especificar patrón usando RegEx
Para especificar expresiones regulares, se utilizan metacaracteres. En el ejemplo anterior, ^
y $
son metacaracteres.
Metapersonajes
Los metacaracteres son caracteres que un motor RegEx interpreta de una manera especial. Aquí hay una lista de metacaracteres:
[]
- Corchetes
Los corchetes especifican un conjunto de caracteres que desea hacer coincidir.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
[abc] | a | 1 coincidencia |
ac | 2 coincidencias | |
Hey Jude | Sin coincidencia | |
abc de ca | 5 coincidencias |
Aquí, [abc]
coincidirá si la cadena que intenta hacer coincidir contiene alguno de los a
, b
o c
.
También puede especificar un rango de caracteres usando -
dentro de corchetes.
[a-e]
es lo mismo que[abcde]
.[1-4]
es lo mismo que[1234]
.[0-39]
es lo mismo que[01239]
.
Puede complementar (invertir) el juego de caracteres usando el signo de intercalación ^
símbolo al comienzo de un corchete.
[^abc]
significa cualquier caracter excepto a o b o c .[^0-9]
significa cualquier carácter que no sea un dígito.
.
- Período
Un punto coincide con cualquier carácter individual (excepto nueva línea '\n'
).
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
.. | a | Sin coincidencia |
ac | 1 coincidencia | |
acd | 1 coincidencia | |
acde | 2 coincidencias (contiene 4 caracteres) |
^
- Intercalación
El símbolo de intercalación ^
se utiliza para verificar si una cadena comienza con cierto personaje.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
^a | a | 1 coincidencia |
abc | 1 coincidencia | |
bac | Sin coincidencia | |
^ab | abc | 1 coincidencia |
acb | Sin coincidencia (comienza con a pero no seguido de b ) |
$
- Dólar
El símbolo del dólar $
se usa para verificar si una cadena termina con cierto personaje.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
a$ | a | 1 coincidencia |
formula | 1 coincidencia | |
cab | Sin coincidencia |
*
- Estrella
El símbolo de la estrella *
coincide con cero o más ocurrencias del patrón que le queda.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
ma*n | mn | 1 coincidencia |
man | 1 coincidencia | |
maaan | 1 coincidencia | |
main | Sin coincidencia (a no va seguido de n ) | |
woman | 1 coincidencia |
+
- Más
El símbolo más +
coincide con una o más ocurrencias del patrón que le queda.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
ma+n | mn | Sin coincidencia (sin a carácter) |
man | 1 coincidencia | |
maaan | 1 coincidencia | |
main | Sin coincidencia (a no va seguida de n) | |
woman | 1 coincidencia |
?
- Signo de interrogación
El signo de interrogación ?
coincide con cero o una aparición del patrón que le queda.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
ma?n | mn | 1 coincidencia |
man | 1 coincidencia | |
maaan | Ninguna coincidencia (más de un a carácter) | |
main | Sin coincidencia (a no va seguida de n) | |
woman | 1 coincidencia |
{}
- Brackets
Considere este código:{n,m}
. Esto significa al menos n , y como mucho m repeticiones del patrón que le quedan.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
a{2,3} | abc dat | Sin coincidencia |
abc daat | 1 coincidencia (en daat ) | |
aabc daaat | 2 coincidencias (en aabc y daaat ) | |
aabc daaaat | 2 coincidencias (en aabc y daaaat ) |
Probemos un ejemplo más. Este RegEx [0-9]{2, 4}
coincide con al menos 2 dígitos pero no más de 4 dígitos
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
[0-9]{2,4} | ab123csde | 1 coincidencia (coincidencia en ab123csde ) |
12 and 345673 | 3 coincidencias (12 , 3456 , 73 ) | |
1 and 2 | Sin coincidencia |
|
- Alternancia
Barra vertical |
se utiliza para la alternancia (or
operador).
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
a|b | cde | Sin coincidencia |
ade | 1 coincidencia (coincidencia en ade ) | |
acdbea | 3 coincidencias (en acdbea ) |
Aquí, a|b
coincide con cualquier cadena que contenga a o b
()
- Grupo
Paréntesis ()
se utiliza para agrupar subpatrones. Por ejemplo, (a|b|c)xz
coincide con cualquier cadena que coincida con a o b o c seguido de xz
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
(a|b|c)xz | ab xz | Sin coincidencia |
abxz | 1 coincidencia (coincidencia en abxz ) | |
axz cabxz | 2 coincidencias (en axzbc cabxz ) |
\
- barra invertida
Reacción negativa \
se utiliza para escapar de varios caracteres, incluidos todos los metacaracteres. Por ejemplo,
\$a
coincide si una cadena contiene $
seguido de a
. Aquí, $
no es interpretado por un motor RegEx de una manera especial.
Si no está seguro de si un carácter tiene un significado especial o no, puede poner \
en frente de eso. Esto asegura que el personaje no sea tratado de manera especial.
Secuencias especiales
Las secuencias especiales hacen que los patrones de uso común sean más fáciles de escribir. Aquí hay una lista de secuencias especiales:
\A
- Coincide si los caracteres especificados están al principio de una cadena.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
\Athe | the sun | Coincidencia |
In the sun | Sin coincidencia |
\b
- Coincide si los caracteres especificados están al principio o al final de una palabra.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
\bfoo | football | Coincidencia |
a football | Coincidencia | |
afootball | Sin coincidencia | |
foo\b | the foo | Coincidencia |
the afoo test | Coincidencia | |
the afootest | Sin coincidencia |
\B
- Opuesto a \b
. Coincide si los caracteres especificados son no al principio o al final de una palabra.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
\Bfoo | football | Sin coincidencia |
a football | Sin coincidencia | |
afootball | Coincidencia | |
foo\B | the foo | Sin coincidencia |
the afoo test | Sin coincidencia | |
the afootest | Coincidencia |
\d
- Coincide con cualquier dígito decimal. Equivalente a [0-9]
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
\d | 12abc3 | 3 coincidencias (en 12abc3 ) |
Python | Sin coincidencia |
\D
- Coincide con cualquier dígito no decimal. Equivalente a [^0-9]
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
\D | 1ab34"50 | 3 coincidencias (en 1ab34"50 ) |
1345 | Sin coincidencia |
\s
- Coincide donde una cadena contiene cualquier carácter de espacio en blanco. Equivale a [ \t\n\r\f\v]
.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
\s | Python RegEx | 1 coincidencia |
PythonRegEx | Sin coincidencia |
\S
- Coincidencias donde una cadena contiene cualquier carácter que no sea un espacio en blanco. Equivale a [^ \t\n\r\f\v]
.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
\S | a b | 2 coincidencias (en a b ) |
| Sin coincidencia |
\w
- Coincide con cualquier carácter alfanumérico (dígitos y alfabetos). Equivale a [a-zA-Z0-9_]
. Por cierto, subraya _
también se considera un carácter alfanumérico.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
\w | 12&": ;c | 3 coincidencias (en 12&": ;c ) |
%"> ! | Sin coincidencia |
\W
- Coincide con cualquier carácter no alfanumérico. Equivalente a [^a-zA-Z0-9_]
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
\W | 1a2%c | 1 coincidencia (en 1a2%c ) |
Python | Sin coincidencia |
\Z
- Coincide si los caracteres especificados están al final de una cadena.
Expresión | Cadena | ¿Coincidencia? |
---|---|---|
Python\Z | I like Python | 1 coincidencia |
I like Python Programming | Sin coincidencia | |
Python is fun. | Sin coincidencia |
Consejo: Para crear y probar expresiones regulares, puede usar herramientas de prueba RegEx como regex101. Esta herramienta no solo lo ayuda a crear expresiones regulares, sino que también lo ayuda a aprenderlas.
Ahora que comprende los conceptos básicos de RegEx, analicemos cómo usar RegEx en su código de Python.
Python RegEx
Python tiene un módulo llamado re
para trabajar con expresiones regulares. Para usarlo, necesitamos importar el módulo.
import re
El módulo define varias funciones y constantes para trabajar con RegEx.
re.buscartodo()
El re.findall()
El método devuelve una lista de cadenas que contienen todas las coincidencias.
Ejemplo 1:re.findall()
# Program to extract numbers from a string
import re
string = 'hello 12 hi 89. Howdy 34'
pattern = '\d+'
result = re.findall(pattern, string)
print(result)
# Output: ['12', '89', '34']
Si no se encuentra el patrón, re.findall()
devuelve una lista vacía.
re.dividir()
El re.split
divide la cadena donde hay una coincidencia y devuelve una lista de cadenas donde se han producido las divisiones.
Ejemplo 2:re.split()
import re
string = 'Twelve:12 Eighty nine:89.'
pattern = '\d+'
result = re.split(pattern, string)
print(result)
# Output: ['Twelve:', ' Eighty nine:', '.']
Si no se encuentra el patrón, re.split()
devuelve una lista que contiene la cadena original.
Puedes pasar maxsplit
argumento del re.split()
método. Es el número máximo de divisiones que ocurrirán.
import re
string = 'Twelve:12 Eighty nine:89 Nine:9.'
pattern = '\d+'
# maxsplit = 1
# split only at the first occurrence
result = re.split(pattern, string, 1)
print(result)
# Output: ['Twelve:', ' Eighty nine:89 Nine:9.']
Por cierto, el valor predeterminado de maxsplit
es 0; es decir, todas las divisiones posibles.
re.sub()
La sintaxis de re.sub()
es:
re.sub(pattern, replace, string)
El método devuelve una cadena donde las ocurrencias coincidentes se reemplazan con el contenido de replace variables.
Ejemplo 3:re.sub()
# Program to remove all whitespaces
import re
# multiline string
string = 'abc 12\
de 23 \n f45 6'
# matches all whitespace characters
pattern = '\s+'
# empty string
replace = ''
new_string = re.sub(pattern, replace, string)
print(new_string)
# Output: abc12de23f456
Si no se encuentra el patrón, re.sub()
devuelve la cadena original.
Puede pasar contar como cuarto parámetro del re.sub()
método. Si se omite, da como resultado 0. Esto reemplazará todas las apariciones.
import re
# multiline string
string = 'abc 12\
de 23 \n f45 6'
# matches all whitespace characters
pattern = '\s+'
replace = ''
new_string = re.sub(r'\s+', replace, string, 1)
print(new_string)
# Output:
# abc12de 23
# f45 6
re.subn()
El re.subn()
es similar a re.sub()
excepto que devuelve una tupla de 2 elementos que contienen la nueva cadena y el número de sustituciones realizadas.
Ejemplo 4:re.subn()
# Program to remove all whitespaces
import re
# multiline string
string = 'abc 12\
de 23 \n f45 6'
# matches all whitespace characters
pattern = '\s+'
# empty string
replace = ''
new_string = re.subn(pattern, replace, string)
print(new_string)
# Output: ('abc12de23f456', 4)
re.buscar()
El re.search()
El método toma dos argumentos:un patrón y una cadena. El método busca la primera ubicación donde el patrón RegEx produce una coincidencia con la cadena.
Si la búsqueda es exitosa, re.search()
devuelve un objeto de coincidencia; si no, devuelve None
.
match = re.search(pattern, str)
Ejemplo 5:re.buscar()
import re
string = "Python is fun"
# check if 'Python' is at the beginning
match = re.search('\APython', string)
if match:
print("pattern found inside the string")
else:
print("pattern not found")
# Output: pattern found inside the string
Aquí, coincidir contiene un objeto de coincidencia.
Coincidir con objeto
Puede obtener métodos y atributos de un objeto de coincidencia usando la función dir().
Algunos de los métodos y atributos comúnmente utilizados de los objetos de coincidencia son:
coincidir.grupo()
El group()
método devuelve la parte de la cadena donde hay una coincidencia.
Ejemplo 6:Igualar objeto
import re
string = '39801 356, 2102 1111'
# Three digit number followed by space followed by two digit number
pattern = '(\d{3}) (\d{2})'
# match variable contains a Match object.
match = re.search(pattern, string)
if match:
print(match.group())
else:
print("pattern not found")
# Output: 801 35
Aquí, coincidir variable contiene un objeto de coincidencia.
Nuestro patrón (\d{3}) (\d{2})
tiene dos subgrupos (\d{3})
y (\d{2})
. Puede obtener la parte de la cadena de estos subgrupos entre paréntesis. Así es como:
>>> match.group(1)
'801'
>>> match.group(2)
'35'
>>> match.group(1, 2)
('801', '35')
>>> match.groups()
('801', '35')
coincidencia.inicio(), coincidencia.final() y coincidencia.span()
El start()
La función devuelve el índice del inicio de la subcadena coincidente. Del mismo modo, end()
devuelve el índice final de la subcadena coincidente.
>>> match.start()
2
>>> match.end()
8
El span()
La función devuelve una tupla que contiene el índice inicial y final de la parte coincidente.
>>> match.span()
(2, 8)
coincidencia.re y coincidencia.cadena
El re
El atributo de un objeto coincidente devuelve un objeto de expresión regular. Del mismo modo, string
atributo devuelve la cadena pasada.
>>> match.re
re.compile('(\\d{3}) (\\d{2})')
>>> match.string
'39801 356, 2102 1111'
Hemos cubierto todos los métodos de uso común definidos en el re
módulo. Si desea obtener más información, visite el módulo Python 3 re.
Usando el prefijo r antes de RegEx
Cuando r o R El prefijo se usa antes de una expresión regular, significa cadena sin formato. Por ejemplo, '\n'
es una nueva línea mientras que r'\n'
significa dos caracteres:una barra invertida \
seguido de n
.
Contragolpe \
se utiliza para escapar de varios caracteres, incluidos todos los metacaracteres. Sin embargo, usando r prefijo hace \
tratar como un personaje normal.
Ejemplo 7:cadena sin formato con el prefijo r
import re
string = '\n and \r are escape sequences.'
result = re.findall(r'[\n\r]', string)
print(result)
# Output: ['\n', '\r']
python