Curso de Programación en Python/RegEx-4
Ir a la navegación
Ir a la búsqueda
Pero, si queremos que coincida con una expresión regular en el comienzo de una cadena y sólo al principio? El módulo re de Python proporciona dos funciones para que coincida con las expresiones regulares. Nos hemos encontrado ya uno de ellos, es decir, la search(). El otro tiene en nuestra opinión un nombre engañoso: match() Fraudulenta, porque match(re_str, s) comprueba si re_str simplemente en el principio de la cadena. Pero de todos modos, match() es la solución a nuestra pregunta, como podemos ver en el siguiente ejemplo: [rrc@Pridd ~]$ python3 Python 3.4.3 (default, Jul 1 2015, 18:38:11) [GCC 4.9.2] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import re >>> Str1 = "Paco es un nombre muy común" >>> Str2 = "Se llamo Paco pero no es Mexicano" >>> print( re.search( r"P..o", Str1 ) ) <_sre.SRE_Match object; span=(0, 4), match='Paco'> >>> >>> print( re.search( r"P..o", Str2 ) ) <_sre.SRE_Match object; span=(9, 13), match='Paco'> >>> print( re.match( r"P..o", Str1 ) ) <_sre.SRE_Match object; span=(0, 4), match='Paco'> >>> print( re.match( r"P..o", Str2 ) ) None Por lo tanto, esta es una manera para que coincida con el inicio de una cadena, pero es un método específico Python, es decir, no se puede utilizar en otros lenguajes como Perl, AWK y así sucesivamente. No es una solución general que es un estándar para las expresiones regulares: El acento circunflejo '^' coincide con el principio de la cadena, y en MULTILINE (se explicará más abajo) modo también coincide inmediatamente después de cada nueva línea, que el método Python match() no hace. El '^' tiene que ser el primer caracter de una expresión regular: >>> print( re.search( r"^P..o", Str1 ) ) <_sre.SRE_Match object; span=(0, 4), match='Paco'> >>> print( re.search( r"^P..o", Str2 ) ) None Pero, ¿qué pasa si se concatena las dos cadenas Str1 y Str2 de la siguiente manera: Str3 = Str2 + "\n" + Str1 Ahora la cadena no se inicia con un Paco de cualquier tipo, pero el nombre es después de un caracter de nueva línea: >>> Str3 = Str2 + "\n" + Str1 >>> print( re.search( r"^P..o", Str3 ) ) None El nombre no se ha encontrado, porque sólo el principio de la cadena está chequeando. Se Cambia, si utilizamos el modo de MULTILINE, que puede ser activado mediante la adición de los siguientes terceros parámetros de búsqueda: >>> print( re.search( r"^P..o", Str3, re.MULTILINE ) ) <_sre.SRE_Match object; span=(36, 40), match='Paco'> >>> print( re.search( r"^P..o", Str3, re.M ) ) <_sre.SRE_Match object; span=(36, 40), match='Paco'> >>> print( re.match( r"^P..o", Str3, re.M ) ) None >>> El ejemplo anterior también muestra que el modo MULTILINE no afecta el método de match(). match() Nunca comprueba nada, pero el principio de la cadena para un coincidencia.