logo

Coincidencia de patrones en Python con Regex

Es posible que esté familiarizado con la búsqueda de texto presionando Ctrl-F y escribiendo las palabras que está buscando. Las expresiones regulares van un paso más allá: le permiten especificar un patrón de texto para buscar. En este artículo, veremos cómo funciona la coincidencia de patrones en Python con Regex.

expresiones regulares en python

Expresiones regulares , también llamado expresión regular , son descripciones de un patrón de texto. Puede detectar la presencia o ausencia de un texto comparándolo con un patrón particular y también puede dividir un patrón en uno o más subpatrones. Por ejemplo, un d en una expresión regular representa un carácter de dígito, es decir, cualquier número entre 0 y 9.



Verifique los números de teléfono usando Regex en Python

La siguiente expresión regular se utiliza en Pitón para hacer coincidir una cadena de tres números, un guión, tres números más, otro guión y cuatro números.

Any other string would not match the pattern. ddd-ddd-dddd>

Las expresiones regulares pueden ser mucho más sofisticadas. Por ejemplo, agregar un 3 entre llaves ({3}) después de un patrón es como decir: Haga coincidir este patrón tres veces. Entonces, la expresión regular ligeramente más corta es la siguiente:



¿Qué es una interfaz?
d{3}-d{3}-d{4}>

Coincide con el formato de número de teléfono correcto.

Coincidencia de patrones con expresiones regulares

Un objeto Regex buscar() El método busca en la cadena que se pasa cualquier coincidencia con la expresión regular. Los objetos Match tienen un método group() que devolverá el texto coincidente real de la cadena buscada. También puedes verCheetsheet de expresiones regularespara más información.

Ejemplo: Importe el módulo regex con import re. Crea un objeto Regex con elre.compilar()función. (Recuerde usar una cadena sin formato). Pase la cadena que desea buscar al método search() del objeto Regex. Esto devuelve un objeto Match. Llame al método group() del objeto Match para devolver una cadena del texto coincidente real.



Python3




# Python program to illustrate> # Matching regex objects> import> re> > # regex object> phoneNumRegex>=> re.>compile>(r>'ddd-ddd-dddd'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(>'Phone number found: '> +> mo.group())>

>

>

Producción:

Phone number found: 415-555-4242>

Paréntesis para agrupar y capturar con Regex

Una de las formas de hacer coincidir patrones con Regex es usar paréntesis alrededor de los patrones. Veamos algunos ejemplos diferentes para una mejor comprensión.

Objetos coincidentes

Supongamos que desea separar el código de área del resto del número de teléfono. Agregar paréntesis creará grupos en la expresión regular: (ddd)-(ddd-dddd). Luego puedes usar el método de objeto de coincidencia group() para tomar el texto coincidente de un solo grupo.

Python3




import> re> phoneNumRegex>=> re.>compile>(r>'(ddd)-(ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(mo.group(>1>))> areaCode, number>=> mo.groups()> print>(>'area code:'>, areaCode)> print>(>'number:'>, number)>

>

>

Producción:

415 area code: 415 number: 555-4242>

Recuperar todos los grupos a la vez

Si desea recuperar todos los grupos a la vez, utilice el método groups(); tenga en cuenta la forma plural del nombre.

Python3

programas c




import> re> phoneNumRegex>=> re.>compile>(r>'(ddd)-(ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(mo.groups())>

>

>

Producción:

('415', '555-4242')>

Coincidir con un paréntesis

Los paréntesis tienen un significado especial en las expresiones regulares, pero ¿qué debe hacer si necesita hacer coincidir un paréntesis en su texto? Por ejemplo, tal vez los números de teléfono que intenta hacer coincidir tengan el código de área entre paréntesis. En este caso, debe escapar de los caracteres (y) con una barra invertida. Ingrese lo siguiente en el shell interactivo:

Python3




import> re> phoneNumRegex>=> re.>compile>(r>'((ddd)) (ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My phone number is (415) 555-4242.'>)> print>(mo.group(>1>))>

>

>

Producción:

(415)>

Los caracteres de escape ( y ) en la cadena sin formato pasada a re.compile() coincidirán con los caracteres de paréntesis reales.

Expresiones regulares: agrupación y carácter de tubería

El | El carácter se llama tubería. Podemos usarlo en cualquier lugar donde queramos hacer coincidir una de muchas expresiones.

Ejemplo: La expresión regular r'Batman|Tina Fey' coincidirá con 'Batman' o 'Tina Fey'. Cuando Batman y Tina Fey aparecen en la cadena buscada, la primera aparición de texto coincidente se devolverá como objeto Match.

Python3




# Python program to illustrate> # Matching regex objects> # with multiple Groups with the Pipe> import> re> heroRegex>=> re.>compile> (r>'Batman|Tina Fey'>)> mo1>=> heroRegex.search(>'Batman and Tina Fey.'>)> print>(mo1.group())>

>

>

Producción:

'Batman'>

Comprensión de las llaves en expresiones regulares

Si tenemos un grupo que queremos repetir un número específico de veces, siga el grupo en la expresión regular con un número entre llaves.

Por ejemplo, la expresión regular (Ha){3} coincidirá con la cadena 'HaHaHa', pero no coincidirá con 'HaHa', ya que esta última tiene solo dos repeticiones del grupo (Ha). En lugar de solo un número, puede especificar un rango entre las llaves. La expresión regular (Ha){3, 5} coincidirá con 'HaHaHa', 'HaHaHaHa' y 'HaHaHaHaHa'. También puede omitir el primer o segundo número entre llaves para dejar el mínimo o máximo ilimitado. (Ha){3, } coincidirá con tres o más instancias del grupo (Ha), mientras que (Ha){, 5} coincidirá con cero a cinco instancias. Las llaves pueden ayudar a acortar las expresiones regulares.

Ejemplo 1: En este ejemplo, usaremos llaves para especificar la aparición del patrón que estamos buscando.

Python3


kat timpf hermana



# Python program to illustrate> # Matching Specific Repetitions> # with Curly Brackets> import> re> haRegex>=> re.>compile>(r>'(Ha){3}'>)> mo1>=> haRegex.search(>'HaHaHa'>)> print>(mo1.group())>

>

>

Producción:

HaHaHa>

Ejemplo 2: En este ejemplo, definiremos la aparición del patrón usando llaves y luego buscaremos si existe un patrón específico en él o no.

Python3




# Python program to illustrate> # Matching Specific Repetitions> # with Curly Brackets> import> re> haRegex>=> re.>compile>(r>'(Ha){3}'>)> mo2>=> haRegex.search(>'Ha'>)>=>=> None> print>(mo2)>

>

>

Producción:

True>

Operador opcional o signo de interrogación (?) en expresión regular

A veces hay un patrón que desea combinar sólo de forma opcional. Es decir, la expresión regular debería encontrar una coincidencia independientemente de que ese fragmento de texto esté ahí o no. El ? El carácter marca el grupo que lo precede como parte opcional del patrón.

Ejemplo 1: Aquí buscaremos un patrón con el patrón 'Batman' o 'Batwoman'. El (dónde)? parte de la expresión regular significa que el patrón wo es un grupo opcional. La expresión regular coincidirá con el texto que tenga cero instancias o una instancia de wo. Es por eso que la expresión regular coincide tanto con 'Batwoman' como con 'Batman'. ¿Puedes pensar en el? como diciendo, grupos Coincide con cero o uno del grupo que precede a este signo de interrogación.

Si necesita hacer coincidir un carácter de signo de interrogación real, escápelo con ?.

Python3




# Python program to illustrate> # optional matching> # with question mark(?)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)?man'>)> mo1>=> batRegex.search(>'The Adventures of Batman'>)> mo2>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo1.group())> print>(mo2.group())>

>

>

Producción:

Batman Batwoman>

Cero o más patrones coincidentes con la estrella

El * (llamado estrella o asterisco) significa coincide con cero o más — el grupo que precede a la estrella puede aparecer tantas veces como desee en el texto. Puede estar completamente ausente o repetirse una y otra vez. Si necesita hacer coincidir un carácter de estrella real, anteponga la estrella en la expresión regular con una barra invertida, *.

Ejemplo 1: En este ejemplo, haremos coincidir las apariciones cero de un patrón en la cadena. La parte (wo)* de la expresión regular coincide con cero instancias de wo en la cadena.

Python3




# Python program to illustrate> # matching a regular expression> # with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo1>=> batRegex.search(>'The Adventures of Batman'>)> print>(mo1.group())>

>

jquery un clic

>

Producción:

Batman>

Ejemplo 2: En este ejemplo, haremos coincidir al menos una aparición de un patrón en la cadena.

Pitón




#python program to illustrate> #matching a regular expression> #with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo2>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo2.group())>

>

>

Producción:

Batwoman>

Ejemplo 3: En este ejemplo, haremos coincidir más de una aparición de un patrón en la cadena.

Pitón




# Python program to illustrate> # matching a regular expression> # with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo3>=> batRegex.search(>'The Adventures of Batwowowowoman'>)> print>(mo3.group())>

>

>

Producción:

Batwowowowoman>

Uno o más patrones coincidentes con el Plus

Mientras * medio coincide con cero o más , el + (o más) significa coincidir con uno o más. A diferencia de la estrella, que no requiere que su grupo aparezca en la cadena coincidente, el grupo que precede al signo más debe aparecer al menos una vez. No es opcional. Si necesita hacer coincidir un carácter de signo más real, prefije el signo más con una barra invertida para escapar: +.

Ejemplo 1: En este ejemplo, haremos coincidir al menos una aparición de un patrón en la cadena.

Python3




# Python program to illustrate> # matching a regular expression> # with plus(+)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)+man'>)> mo1>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo1.group())>

>

>

Producción:

Batwoman>

Ejemplo 2: En este ejemplo, la expresión regular Bat(wo)+man no coincidirá con la cadena 'Las aventuras de Batman' porque el signo más requiere al menos un wo.

media vs promedio

Pitón




# Python program to illustrate> # matching a regular expression> # with plus(+)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)+man'>)> mo3>=> batRegex.search(>'The Adventures of Batman'>)>=>=> None> print>(mo3)>

>

>

Producción:

True>

Artículo relacionado Hoja de referencia de expresiones regulares