Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

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.

Puede complementar (invertir) el juego de caracteres usando el signo de intercalación ^ símbolo al comienzo de un corchete.


. - 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

  1. Palabras clave e identificadores de Python
  2. Tipos de datos de Python
  3. Operadores de Python
  4. Declaración de paso de Python
  5. Argumentos de la función de Python
  6. Diccionario de Python
  7. Iteradores de Python
  8. Cierres Python
  9. Fecha y hora de Python
  10. Módulo de tiempo de Python
  11. Sueño de Python ()