Diferencia entre revisiones de «Curso de Programación en Python/RegEx-1»
Ir a la navegación
Ir a la búsqueda
(Sin diferencias)
|
Revisión actual del 19:55 19 dic 2015
RegEx
Expresiones regulares (llamadas REs, o regexes o los patrones regex) son esencialmente un pequeño, lenguaje especializado de programación embebido dentro de Python y disponible a través del re módulo. Usando este lenguaje para especificar las reglas de posibles cadenas de caracteres que desea buscar; Este conjunto puede contener frases, o direcciones de correo electrónico, o comandos de TeX o algo que te guste. Puedes entonces hacer preguntas como "Esta cadena coincide con el patrón?", o "Es un partido para el patrón en cualquier lugar de esta cadena?". También puede utilizar REs a modificar una cadena o dividirlo en varias formas. El lenguaje de la expresión regular es relativamente pequeño y restringido, así que no todo el procesamiento de RegEX es posible
.
RegEx Meta Caractares
Los Meta Caractares son: . ^ $ * + ? { } [ ] \ | ( ) Los metacaracteres '[' y ']' son usados para especificar un clase de caracteres que quieres coincidir. Puedes especificar los caracteres individualmente o en rangos de caracteres.Entonces; [abc] coincide con algún de los caracteres 'a', 'b', o 'c' y [a-c], es decir el rango de caracteres 'a' a 'c'. Si quieres buscar solo caracteres minusculas puedes escribir [a-z]. Si quieres incluir un '-' en el expresion, debe ser el primer or final caracter en las corchetas. [-0-9] o [a-zA-Z0-9-] Metacaracteres no son activos a dentro de clases, entonces; [akm$] coincide a algún de los caracteres 'a', 'k', 'm', or '$'. '$' normalmente es un metacaracter, pero adentro de la clase de caracteres, el pierde su caracteristicas de metacaracter. El caracter '^' usado como el primer caracter adentro de un class puede coincidir a caracteres no espesificados. Entonces [^5] coincede a algún caracter que no es '5'. Un metacaracter muy importante en Python RegEx es el diagonal; '\'. Asi cómo en literales de cadenas de Python, el '\' seguida con varios caracters indica sequencias de significos especiales. Se usa también para escapar otro metacaracters para utilizarlas en los patrones entoces puedes escribir '\[' para indicar el metacaracter '[' literalmente y \\' para indicar el metacaracter '\' literalmente. Algúnas de las sequencias de caracteres especiales representan caracteres muy utiles como unidades de digitos o letras o espacio blanco, Por ejemplo '\w' coincide can algún caracter alfannumérico que puede representar con [a-zA-Z0-9_]. Algunos de los sequencias especiales: \d Algún digito decimal [0-9]. \D Ningún digito decimal [^0-9]. \s Algún caracter de espacio blanco [ \t\n\r\f\v]. \S Ningún caracter de espacio blanco [^ \t\n\r\f\v]. \w Algún caracter alfanumerico [a-zA-Z0-9_]. \W Ningún caracter alfanumerico [^a-zA-Z0-9_]. Puedes incluir las sequencias de caracteres especiales en una clase por ejemplo: [\s,.] coresponde a algún caracter de espacio blanco, o ',' o '.'. La sequencia especial '.' coresponde a algún caracter con excepción de línea nueva. Existe también (re.DOTALL) que coresponde a algún caracter, línea nueva incluida.
Repetición
Puede especificar que partes de la RE se deben repetir un determinado número de veces. El primer metacaracter para repetir cosas que vamos a ver es *. * No coincide con el caracter literal '*', se especifica que el caracter anterior se puede emparejar cero o más veces, en lugar de una sola vez. Por ejemplo, ca*t coincidirá a ct; (0 a caracteres), cat; (1 a caracter), caaat; (3 a caracteres ), y así sucesivamente. El motor RE tiene varias limitaciones internas derivadas del tamaño del de C tipo int que evitar que se emparejan más de 2 mil millones a los patrones repitidos. Generalmente no se escriben para que coincida con la cantidad de datos. Otra metacaracter de repetición es +, lo que coincide con una o más veces. Preste especial atención a la diferencia entre * y +; * Coincide con cero o más veces, entonces lo que sea que se repiten pueden no estar presentes en absoluto, mientras + requiere al menos un aparición. Para usar un ejemplo similar, ca + t coincidirá gato (un 1), caaat (3 de una), pero no coincidirá ct. Hay dos más calificadores de repetición. El carácter de signo de interrogación,?, Coincide ya sea una o cero veces; se puede pensar en ello como algo que marca como opcional. Por ejemplo, Hacer-?lo coincide a Hacer-lo y también Hacerlo. El más complicado calificador re repetición es {m, n}, donde m y n son números enteros decimales. Este calificativo significa que debe haber al menos m repeticiones, y como máximo n. Por ejemplo, a/{1,3}b coincidirá con a/b, a//b, y a///b. No va a coincidir con ab, que no tiene barras, o a////b, que tiene cuatro barras. Puede omitir cualquiera de m o n; en ese caso, un valor razonable se asume para el que falta valor. Omitiendo m es interpretado como un límite inferior de 0, mientras que omite n resulta en una límite superior del infinito - de hecho, el límite superior es el límite de 2 millones millones Los otros tres clasificados pueden ser todos expresado usando esta notación. {0,} es el mismo que '*', {1,} es equivalente a '+', y {0,1} es el mismo que '?'. Es mejor usar '*', '+', o '?' cuando se puede, simplemente porque son más cortos y fáciles de leer.
Coincidir con caracteres especiales
Este módulo proporciona RegEx operaciones similares a las encontradas en Perl. Ambos patrones y cadenas a ser buscados pueden ser cadenas Unicode, así como cadenas de 8 bits. Las expresiones regulares utilizan el caracter de barra invertida ('\') para indicar las formas especiales o para permitir caracteres especiales para ser utilizados sin necesidad de invocar su significado especial. Esto choca con Python el uso del mismo caracter para el mismo propósito en los literales de cadena; por ejemplo, para que coincida con una barra invertida literal, uno podría tener que escribir '\\\\' como la cadena de modelo, ya que el normal expresión debe ser \\, y cada barra invertida debe ser expresado como \\ dentro de una cadena literal. La solución es utilizar la notación cadena raw de Python para patrones de expresiones regulares; barras invertidas no se manejan de un modo especial en una cadena literal con el prefijo "r". Así r"\n" es un caracter especial de dos caracteres que contiene '\' y 'n', mientras que "\n" es una cadena de un caracter que contiene una nueva línea. Normalmente patrones se expresarán en código Python usando esta notación de cadena raw Es importante tener en cuenta que la mayoría de las operaciones de expresiones regulares están disponibles como funciones de nivel de módulo y los métodos RegexObject. Las funciones son atajos que no requieren para compilar un objeto de expresión regular primero, pero falta algunos parámetros de ajuste.
Regular String |
Raw string |
---|---|
"ab*" |
r"ab*" |
"\\\\section" |
r"\\section" |
"\\w+\\s+\\1" |
r"\w+\s+\1" |