Python regex

Como nuevo desarrollador, las expresiones regulares (o regex, como se las conoce comúnmente), pueden ser desalentadoras debido a la sintaxis extraña y desconocida: & nbsp; & nbsp; & nbsp;

Cuando era un desarrollador nuevo y vi la expresiòn anterior por primera vez, recuerdo que mi primer pensamiento fue " ¿qué dices? Nunca podré aprender ese galimatìas. Eso es demasiado para mì. No puedo hacerlo. "

¬°Pero t√∫ puedes! Es sòlo cuestiòn de superar esa abrumadora sensaciòn inicial de que las expresiones regulares son demasiado extra√±as. Al igual que aprender o hablar un idioma extranjero & mdash; una vez que lo domine, será bastante natural. ¬°Lo prometo!

En este artìculo, echamos un vistazo a qué son las expresiones regulares, por qué se usan y còmo usarlas en Python. Cuando termine este artìculo, tendrá un conocimiento sòlido de las expresiones regulares para que pueda interpretar lo que significa la expresiòn anterior.

¿Qué son las expresiones regulares? & Nbsp;

Cuándo Si echamos un vistazo a lo que es una expresiòn regular, necesitamos recordarnos qué es una cadena. Recuerde que una cadena es solo una colecciòn de caracteres que están encadenados y delimitados por un conjunto de comillas:

 & ldquo ; Hola mundo " " 555-555-5555 " & nbsp; & nbsp; & nbsp; " John Doe 123 Main St. Anywhere, EE. UU. 99999-9999 " & nbsp; & nbsp; " [email protected]‚" 

Estos son todos ejemplos de cadenas. Pueden tener cualquier longitud o ninguna. Las expresiones regulares, o más com√∫nmente abreviadas como regex , es una expresiòn cuyos componentes combinan patrones con cadenas para encontrar alg√∫n tipo de informaciòn.

El 81% de los participantes declarò se sintieron más seguros acerca de sus perspectivas laborales de tecnologìa después de asistir a un campamento de entrenamiento. Asigne a un bootcamp hoy mismo.

El graduado promedio de bootcamp pasò menos de seis meses en la transiciòn profesional, desde comenzar un bootcamp hasta encontrar su primer trabajo.

¿Qué tiene de bueno las expresiones regulares? es que no necesariamente se preocupa por el idioma que está codificando en & mdash; es bastante independiente del lenguaje. La diferencia viene en los métodos del lenguaje y en còmo realizar acciones usando esas expresiones. & Nbsp;

¿Para qué se usan las expresiones regulares?

Regex es un patròn que nos gustarìa busque especìficamente en una cadena. Podemos usar expresiones regulares para buscar una frase o patròn en particular para reemplazarlo con otra cosa, o podemos validar formularios para estar seguros de que un usuario está ingresando informaciòn en un formato determinado para que sea consistente en todos los usuarios.

Buscar y reemplazar

Digamos, por ejemplo, que tenemos un n√∫mero de teléfono presentado en este formato:

 555 555 5555 

Este es un formato válido para un n√∫mero de teléfono en los Estados Unidos. Pero, ¿y si quisiéramos reemplazar los espacios con guiones? ¿O agregar paréntesis alrededor del còdigo de área y un guiòn para hacerlo más legible?

¬°Podemos usar expresiones regulares para eso! En la siguiente secciòn repasaremos còmo hacer eso con Python & mdash; por ahora, quiero que se familiarice con lo que puede hacer con las expresiones regulares y còmo pueden ser √∫tiles.

El resultado que verìamos después de buscar y reemplazar un n√∫mero de teléfono en Python para el formato que nos gustarìa usar serìa:

No hay necesidad de codificar o buscar un valor o ìndice especìfico de la cadena en expresiones regulares porque podemos simplemente buscar los patrones en las cadenas y manipular todos los registros que tenemos para hacer coincidir.

Validar

¿Alguna vez llenò algo en un sitio solo para que se muestre un mensaje de error debido a un sìmbolo perdido o un patròn que no siguiò? Lo más probable es que se hayan utilizado expresiones regulares para asegurarse de que su entrada coincida con lo que busca su base de datos.

Esto se llama validaciòn y es muy √∫til cuando se crean formularios para asegurarse de que un n√∫mero de teléfono sigue el formato en el que desea que esté o que una direcciòn de correo electrònico sea una direcciòn de correo electrònico formateada correctamente, o una contrase√±a coincida con los parámetros que ha establecido para que sea una contrase√±a válida (longitud, caracteres especiales, dìgitos, may√∫sculas o min√∫sculas , etc.). & nbsp;

Esto ayuda a prevenir errores en su base de datos al alertar al usuario sobre errores tipográficos o patrones no coincidentes. & nbsp;

En la siguiente secciòn, Echaremos un vistazo a los componentes o comparadores de patrones que construyen expresiones regulares.

Tipos de comparadores de patrones de expresiones regulares

Los caracteres literales, metacaracteres y cuantificadores hacen los tipos de coincidencias de patrones que vemos en las expresiones regulares. Un comparador de patrones es un carácter que se utiliza para ayudar a encontrar un patròn en una cadena. Es el componente principal de una expresiòn regular.

Caracteres literales

El ejemplo más básico de un comparador de patrones en expresiones regulares es un carácter literal. Coincide con un carácter o una cadena codificados de forma rìgida.

Ejemplos: & nbsp;

hola & rArr; colecciòn de cinco caracteres distintos.

Cuando se aplica un patròn de expresiòn regular aquì, busca cada uno de estos caracteres en sucesiòn. " hola & rdquo ;, " hola & rdquo ;, o " hola " aprobarìa una verificaciòn de patròn, pero "Hola", "hola" o "Hola" no lo harìa.

"Career Karma entrò en mi vida cuando más lo necesitaba y rápidamente me ayudò a combinar con un bootcamp. Dos meses después de graduarme, encontré el trabajo de mis sue√±os que se alineaba con mis valores y objetivos en la vida! "

Venus, ingeniero de software de Rockbot

A & rArr; colecciòn de un carácter distinto.

Debido a que la expresiòn regular busca caracteres distintos, también distingue entre may√∫sculas y min√∫sculas. Entonces " A " pasarìa, pero " a " no lo harìa. Entraremos más en esto en un momento. & Nbsp;

Una oraciòn simple . & rArr; colecciòn de varios caracteres distintos.

Regex busca cada carácter en la expresiòn en sucesiòn cuando mira una cadena. Si " Una oraciòn simple " no está en la cadena buscada exactamente como está escrito en la expresiòn regular, no pasarìa.

Caracteres de escape

Eche un vistazo al √∫ltimo ejemplo. Observe que hay un frente al perìodo. Un punto en la sintaxis de expresiòn regular es sinònimo de palabras clave en lenguajes como JavaScript o Python.

No puede utilizar un punto / punto por sì solo si desea que forme parte de un patròn en expresiones regulares. Debe escapar del carácter para que el motor de expresiones regulares lo interprete como una representaciòn literal de un punto en lugar del significado de la expresiòn regular. & Nbsp;

Aquì hay algunas otras secuencias especiales de caracteres que debe tener un escape si desea el carácter literal en lugar del significado traducido en el que el motor de expresiones regulares lo compila.

  • Asterisco *
  • Barra invertida /
  • Más +
  • Caret ^
  • Signo de dòlar $
  • Punto / punto.
  • Pipe |
  • Pregunta Mark?
  • Paréntesis & ndash; ambos tipos ()
  • Curly Braces & ndash; ambos tipos {}

Los caracteres literales en expresiones regulares coinciden exactamente con el carácter que incluye como parte del patròn. Si desea incluir un carácter que aparece en la lista anterior, aseg√∫rese de evitarlo para que también pueda ser parte de su expresiòn regular.

Coincidencias comunes

El propòsito de una matcher es hacer coincidir varias letras en un patròn. Esta colecciòn de sìmbolos de coincidencia de patrones es bastante consistente entre los lenguajes de programaciòn que usan expresiones regulares.

Coincidencia Descripciòn Ejemplo
. Coincide con cualquier carácter nw coincidirìa con ahora, naw o nuevo , etc. Cualquier carácter pasa la prueba
^ regex Busca patròn en principio de la lìnea ^ hola coincidirìa con hola en una lìnea que comenzara con ese patròn
regex $ Busca patròn al final de la lìnea world $ coincidirìa con world en una lìnea que terminara con ese patròn
[abc] Coincidencias a, b o c & nbsp; [misp] se considera un conjunto y coincidirìa con cualquier cadena que contenga alguno de esos caracteres. & nbsp;
Por ejemplo, podrìa coincidir con todas las letras individuales de mississippi y mississippi, pero solo algunas de las letras de marsh y missouri
[abc] [xyz] Matc Hes a, b, oc seguido de x, y, o z / [Mm] [sip] / coincidirìa con cualquier cadena que comience con M om, seguido de un conjunto que tenga cualquiera de los caracteres en [sip]
[^ abc] No a, b, o c [^ rstlne] coincidirìa cualquier carácter que no sea r, s, t, l, n o e
[a-zA-Z0-9] Coincide con cualquier carácter dentro del rango [an] coincidirìa con cualquier carácter entre a y n. y, end, blind, can , todos tienen caracteres que coinciden completamente aquì
A | B A o B M | m. coincidirìa con cualquier palabra o frase de al menos dos caracteres de longitud que coincida con una M o una m más al menos uno o más caracteres.
CAT Coincide con C, seguido de A, seguido de T hola mundo coincidirìa con hola mundo exactamente

Metacaracteres

Las expresiones regulares también usan metacaracteres para describir un patròn. Los metacaracteres tienen alg√∫n tipo de significado detrás de ellos y describirán la forma del patròn.

Metacarácter Descripciòn Ejemplo
d Coincide con cualquier dìgito d coincidirìa con 1, 2 o 3, etc. Abreviatura de [0-9]
D Coincide con cualquier carácter que no sea un dìgito D coincidirìa con A, B, g, etc. Abreviatura de [^ 0-9] & nbsp;
s Coincide con cualquier espacio en blanco carácter s coincidirìa con nuevas lìneas, tabulaciones, espacios, etc. & nbsp;
S Coincide con cualquier -Carácter de espacio en blanco & nbsp; S coincidirìa con cualquier carácter excepto con un carácter de espacio en blanco. & nbsp;
w Coincide con cualquier carácter de palabra Un carácter de palabra, abreviatura de [a-zA-Z_0-9]
W Coincide con cualquier carácter que no sea de palabra [W] coincidirìa con cualquier carácter especial. Abreviatura de [^ w]

Nota : Los metacaracteres de letras may√∫sculas (W, D, etc.) suelen corresponder al contrario de qué hacen los metacaracteres de letras min√∫sculas (w, d, etc.). & nbsp;

Cuantificadores

Cuantificador Descripciòn Ejemplo
+ Uno o más del carácter anterior d + coincidirìa con dos o más dìgitos
* Cero o más del carácter anterior . * coincidirìa con cualquier carácter 0 veces o más & nbsp;
Nota: ¬°Técnicamente, una cadena vacìa cumplirìa esta expresiòn regular!
? Cero o uno de los el carácter anterior a?. * coincidirìa con a, any, hello, world & nbsp;
{number} Coincide exactamente con el carácter anterior n√∫mero de veces & nbsp; d {3} coincide exactamente con tres dìgitos [0-9]
{num1, num2} Coincide con el carácter anterior en un rango de n√∫meros d {3,5} coincide con 3 a 5 dìgitos que son [0-9]

Utilice los cuantificadores, metacaracteres y otros comparadores como los bloques de construcciòn para sus expresiones regulares. La sintaxis mencionada aquì es similar en varios lenguajes que usan expresiones regulares.

Sin embargo, hay algunas cosas que se usan en Ruby o JavaScript, por ejemplo, que no serìan transferibles a Python.

Aprendamos un poco más sobre còmo funcionan las expresiones regulares en Python en la siguiente secciòn.

¿Còmo funcionan las expresiones regulares en Python?

Para usar expresiones regulares en Python, importe el còdigo re mòdulo en la parte superior de su archivo. & nbsp;

¬°Es asì de simple! No hay nada especial que deba agregar ni paquetes que deba descargar. Ya está integrado siempre que lo importe. & Nbsp;

La diversiòn proviene de còmo usar los diferentes métodos que están disponibles para nosotros en el mòdulo re.

re.search (regex, str, flags = 0)

Utilice la funciòn de b√∫squeda cuando desee aplicar un patròn de expresiòn regular a una cadena para ver si el patròn es contenido en la cadena. Este método tomará un patròn de expresiòn regular y lo hará coincidir en cualquier lugar de la cadena.

Si el patròn de expresiones regulares NO está contenido en la cadena, el intérprete devolverá None . Si hay una coincidencia, se devolverá un objeto Match que contendrá informaciòn sobre él. & Nbsp;

El objeto Match tiene una propiedad y dos métodos que se pueden utilizar para recuperar informaciòn sobre la coincidencia:

match_obj.span () un método que devuelve una tupla que contiene las posiciones inicial y final de la coincidencia (el final position es inclusiva).

match_obj.string una propiedad que devuelve la cadena pasada a la funciòn.

match_obj.group () un método que devuelve la parte de la cadena donde hubo una coincidencia.

match_obj aquì será reemplazado con la variable que asignes al resultado de tu re .search () método. Aquì hay un ejemplo que utiliza cada método y propiedad: & nbsp;

Lo principal para recordar aquì es que el < còdigo> Coincidir objeto en Python tiene métodos y & nbsp; properties.

Usamos la cadena de propiedades para acceder a la cadena original con la que probamos la expresiòn regular, el método span para acceder a los ìndices y el método group para obtener el resultado coincidente real. & nbsp; < br>

Hay otros métodos y propiedades a los que se puede hacer referencia en los documentos de Python, pero estos son buenos para comenzar. & nbsp;

Argumentos opcionales: & nbsp; flags

También hay un argumento opcional que puede usar con el método de b√∫squeda del mòdulo re . Para usarlo, asigne el parámetro flags a una lista de las banderas que le gustarìa usar. El valor predeterminado es 0. Algunas de las opciones más populares incluyen: & nbsp;

  • re.DEBUG

Este indicador mostrará informaciòn de depuraciòn. sobre la expresiòn regular compilada si es necesario. & nbsp;

  • re.I
    re.IGNORECASE

Coincidencia que no distingue entre may√∫sculas y min√∫sculas. Esto ignorará el caso de los caracteres pasados ‚Äã‚Äãen conjuntos o caracteres literales para que las letras may√∫sculas y min√∫sculas coincidan.

  • re.M
    re.MULTILINE < / li>

Modo multilìnea. Permite que los metacaracteres de expresiones regulares al principio y al final de la lìnea se utilicen en cadenas de varias lìneas. De lo contrario, solo mirarìa el principio y el final de la cadena. Sin la bandera multilìnea, el motor de expresiones regulares considera la cadena como una lìnea.

  • re.S
    re.DOTALL

Esta bandera indica el motor de expresiones regulares que el carácter de punto coincidirá con cualquier carácter. El comportamiento predeterminado es que el carácter de punto coincida con todos los caracteres excepto con un carácter de nueva lìnea. & Nbsp;

  • re.X
    re.VERBOSE

La marca verbosa le permite agregar comentarios a su expresiòn regular para desglosar su expresiòn y comentar sobre su propòsito. Esto puede ayudar enormemente a medida que aprende expresiones regulares en Python. & nbsp;

Este fragmento de còdigo toma el ejemplo anterior e incorpora algunos de los indicadores enumerados anteriormente. Cuando utilice más de un indicador, utilice el operador bit a bit | entre cada uno como separador.

Tòmate el tiempo para notar còmo las banderas nos ayudan a probar nuestra cadena. Intente eliminar el parámetro de banderas. ¿La cadena devuelve un resultado? Si no es asì, ¿qué devuelve como resultado? & Nbsp;

Recuerde que el método de b√∫squeda en el mòdulo re incluye la expresiòn regular, la cadena que se buscará y un parámetro de banderas opcional. Un valor verdadero devolverá un objeto de coincidencia que tiene propiedades y métodos asociados. Un valor falso devuelve un objeto NoneType. & Nbsp;

re.match (regex, str, flags = 0)

Utilice el & nbsp; método de coincidencia cuando busca hacer coincidir un patròn de expresiones regulares con el principio de la cadena. Si desea hacer coincidir el patròn de expresiones regulares en cualquier lugar de la cadena, utilice el método de b√∫squeda anterior. & Nbsp;

Al mirar este còdigo en un intérprete de Python, verá que el primer método, match () , no devolverá un objeto Match , sino None . El segundo permite mirar dentro de la cadena y devolverá un objeto Match . Esto se debe a que el método match () solo mira al comienzo de una cadena, incluso si se activa la marca re.MULTILINE . & Nbsp;

re.sub (findRegex, replaceWith, str, count = 0, flags = 0)

El método sub () en el mòdulo re toma una regex, encuentra la coincidencia más a la izquierda en una cadena y la reemplaza con otra cosa. Repite la misma operaciòn el n√∫mero de veces indicado en el parámetro de conteo. Si no hay un parámetro de recuento o se establece en cero, se reemplazarán todas las ocurrencias. & Nbsp;

Al comienzo de este artìculo, hablamos sobre còmo reformatear un n√∫mero de teléfono. Veamos còmo hacerlo aquì: & nbsp;

Esto toma nuestra cadena de teléfono, encuentra todos apariciones de espacios en blanco y lo reemplaza con un guiòn. En este caso, terminamos con 555-555-5555 .

Intentemos un reformateo más difìcil:

En En este ejemplo, vamos al principio de la lìnea para agregar un paréntesis abierto y asignar esa nueva cadena a una variable. & nbsp;

Luego tomamos esa nueva variable asignada ( left_parens ) y utilìcelo para realizar la misma operaciòn al buscar el siguiente carácter de espacio en blanco disponible para reemplazarlo con un paréntesis cerrado. Esto se asigna a right_parens . & Nbsp;

Finalmente, tomamos la variable right_parens y la usamos para realizar la misma operaciòn en el carácter de espacio en blanco final para reemplácelo con un guiòn. & nbsp;

Esto nos dará (555)555-5555 . & nbsp;

Para recapitular, el sub El método () toma un patròn de expresiones regulares, una cadena o funciòn de reemplazo, la cadena real en la que queremos realizar el sub () y un recuento. Si no proporcionamos un recuento, realizará los reemplazos en todos los casos. Devuelve la nueva cadena con las sustituciones realizadas. & Nbsp;

Conclusiòn

Las expresiones regulares son una forma de validar datos o de buscar y reemplazar caracteres en nuestras cadenas. Regex consta de metacaracteres, cuantificadores y caracteres literales que se pueden usar para probar nuestras cadenas para ver si pasa una prueba de validaciòn o para buscar y reemplazar coincidencias. & Nbsp;

Regex puede ser un poco abrumador al principio, pero una vez que lo entiendes, es un poco como andar en bicicleta. & nbsp; Estará en el fondo de tu memoria y será muy fácil de recuperar.

Cuando sientas que tienes una idea de lo que aparece en este artìculo, echa un vistazo a los documentos de Python para ver qué más se puede hacer con expresiones regulares. Definitivamente, eche un vistazo a los métodos de compilaciòn y divisiòn. & Nbsp;

¬°Feliz expresiòn regular!