Ejercicios de Expresiones Regulares PDF

Title Ejercicios de Expresiones Regulares
Author Enrique Ambriz
Course Ingenieria de Software
Institution Sistema Educativo Universitario Azteca
Pages 14
File Size 891.3 KB
File Type PDF
Total Downloads 80
Total Views 155

Summary

Ejercicios de REGEX...


Description

Eje Ejerc rc rcicio icio icioss de Ex Expr pr presio esio esione ne ness Re Regu gu gular lar lares es Ing. En Sistemas computacionales

Expresiones Regulares (regex) Las re regex gex son cadenas de caracteres basadas en reglas sintácticas que permiten describir secu secuen en encias cias de car caracte acte acteres res res. Así, forman parte de los lenguajes regulares, los cuales son un subgrupo de los lenguajes formales, de gran importancia para la tecnología de la información y, especialmente, para el desarrollo de software.

Las expresiones regulares se pueden aplicar en d dive ive iversos rsos leng lenguaj uaj uajes es es, tales como Perl, Python, Ruby, JavaScript, XML o HTML, por lo que los usos o funciones pueden llegar a ser muy diferentes. En JavaScript los patrones regex se utilizan, por ejemplo, en los métodos de cadena search(), match() o replace(), mientras que las expresiones en documentos XML sirven para limitar elementos de contenido. En lo que respecta a la sintax sintaxis is is, entre los diferentes lenguajes de programación y lenguajes de marcado apenas ha hayy dif diferen eren erencias cias en cuanto a las expresiones regulares: Así, una expresión regular puede estar formada por hasta tres partes, independientemente del lenguaje en el que se va a utilizar: Pattern (patrón Patt ern (pa trón de b úsq ued a) búsq úsqued ueda) Del Delimit imit imiter er (del (delimit imit imitador ador ador))

Mod Modifie ifie ifierr (mod (modific ific ificad ad ador) or)

eleme ment nto centra trall es el p patrón atrón,, es esto patrón búsqued quedaa ggene eneral. como hem emos El ele me nt o cen tra atrón to es, el pa trón de bús qued ene ral. Tal y com oh em os exp licad o an tes ued e form ar a par tir d e ccarac arac teres sim pl es o a pa rtir de una explicad licado antes tes,, se p pued uede formar partir de aracteres simpl ples partir combin inación caract acteres simples espec peciale iales. comb in ación de car act eres sim ples y es pec iale s. El inicio y el final del patrón se identifican con delimitadores. Los delimitadores son, básicamente, todos los caracteres no alfanuméricos (excepto la barra diagonal inversa). Por ejemplo, para PHP las almohadillas (#pattern#), los signos de porcentaje (%pattern%), el signo más (+pattern+) o las tildes (~pattern~) son delimitadores. La mayoría de lenguajes ya usan las comillas (“pattern”) o las barras diagonales (/pattern/). Los modificadores pueden añadirse a un patrón de búsqueda para modificar la expresión regular. Un ejemplo es el modificador i, el cual anula la distinción entre mayúsculas y minúsculas. Garantiza que las mayúsculas y las minúsculas se tienen en consideración y que valen por defecto para todas las expresiones regulares.

A continuación, listamos algunos de los carac caractere tere teress eespeci speci speciales ales de sin sintaxis taxis que pueden ampliar los patrones con opciones específicas: Car acte res espe ciale Caracte acteres especiale cialess regexx de sin sintaxis rege taxis [] () ^ $ .

Func ión Función Los corchetes identifican a una clase de caracteres que siempre representa a un único carácter en un patrón de búsqueda. Los paréntesis identifican un grupo de caracteres formado por uno o varios caracteres y que pueden operarse unos dentro de los otros. Funciona a modo de especificación del área (de […] hasta […]) cuando se sitúa entre dos caracteres normales. Limita la búsqueda al inicio de una línea (otra función: elemento de negación en clases de caracteres). Limita la búsqueda al final de una línea. Equivale a cualquier carácter.

* + ? {n} {n,m {n,m}} {n,} \b \B \d \D \w \W

El número del carácter, de la clase o del grupo situado antes del asterisco puede ser aleatorio (cero incluido). El carácter, la clase o el grupo antes de un signo más debe aparecer como mínimo una vez. El carácter, la clase o el grupo antes del signo de interrogación es opcional y puede aparecer como máximo una vez. El carácter, la clase o el grupo anteriores aparecen exactamente n veces. El carácter, la clase o el grupo anteriores aparecen como mínimo n veces y como máximo m veces. El carácter, la clase o el grupo anteriores aparecen como mínimo n veces o con frecuencia. Tiene en cuenta el límite de palabra durante la búsqueda. Ignora el límite de palabra durante la búsqueda. Cualquier dígito; abreviatura para la clase de caracteres [0-9]. Cualquier no dígito; abreviatura para la clase de caracteres [^0-9]. Cualquier carácter alfanumérico; abreviatura para la clase de caracteres [a-zAZ_0-9]. Cualquier carácter no alfanumérico; abreviatura para la clase de caracteres [^\w].

Ex Expre pre presio sio sione ne ness re regu gu gular lar lares es de un el elem em eme ento La forma regex más sencilla es un patrón de búsqueda que tan solo prevé un único elemento como resultado. Este tipo de expresión regular de un elemento puede, por ejemplo, definirse sin problemas usando una clase d de e car caracte acte acteres res res, siempre y cuando no se esté buscando un elemento concreto. La siguiente expresión permite opcionalmente los dígitos “1”, “2”, “3”, “4”, “5”, “6” o “7” como posible resultado:

[1234567]

número En este caso, los número meross son dire directam ctam ctamen en ente te ccons ons onsecu ecu ecutivos tivos tivos, por lo que también se permite la siguiente grafía simplificada:

[1-7]

En caso de que la expresión regular deba modificarse para excluir de la búsqueda el dígito “4”, también se puede utilizar la variante más simple con el signo menos:

[1-35-7]

Not Notaa Los caracteres de un patrón regex no se separan con espacios.

Ex Expre pre presio sio sione ne ness re regu gu gular lar lares es de va vario rio rioss eelem lem leme ento ntoss En el caso de las expresiones regulares de varios elementos, también se puede trabajar con clases de caracteres para permitir resultados diferentes. Si la expresión tiene que incluir, por ejemplo, dos elementos para los que se pueden esperar diferentes resultados, entonces bas basta ta con col colocar ocar d dos os cl clase ase asess d de e car caract act acteres eres u una na desp despu ués de la otr otraa:

[1-7][a-c]

Como primer elemento, ha de aparecer un número de entre el “1” y el “7”, seguido de una letra “a”, “b” o “c”. Recordamos que aquí las min minúscu úscu úsculas las son oblig obligat at atorias orias orias. Sin profundizar en los modificadores, con este pequeño ajus ajuste te d de e llaa exp expresi resi resión ón p pue ue uedes des inclu incluir ir llas as m mayú ayú ayúscul scul sculas as as:

[1-7][a-cA-C]

Ex Expre pre presio sio sione ne ness re regu gu gular lar lares es co con n eelem lem leme ent ntos os o opc pc pcio io iona na nales les Al margen de si se buscan varios elementos en una única expresión regular o con ayuda de varios grupos de caracteres, es posible que det determ erm erminad inad inados os elem elemen en entos tos ssolo olo se d deban eban o pued puedaan inc incluir luir een nd deter eter etermin min minad ad adas as condic condicion ion iones es es. Este puede ser, por ejemplo, el caso de una expresión regular que debe filtrar todos los números de casa de las direcciones. En los casos en los que el núm número ero de casa sea un únic único o díg dígito ito ito, puede coincidir con algunos resultados en los que el número está compuesto por dos o incluso tr tres es d dígi ígi ígitos tos tos. Además, hay direcciones en las que el n núm úm úmero ero de ccasa asa inc incluye luye tam también bién un unaa lletra etra etra. Para abarcar todas estas posibles combinaciones, puedes usar las siguientes instrucciones regex:

[1-9][0-9]?[0-9]?[a-z]?

El único elemento obligatorio de este patrón de búsqueda es un número del “1” al “9”. Pueden estar seguidos opcionalmente tanto por dos dígitos del “0” al “9”, como por una letra cualquiera. Todas las opciones posibles se marcan con el signo de interrogación visto arriba.

Aunque la construcción de números de tres dígitos con letras adicionales resulta bastante clara, los núm números eros de has hasta ta di diez ez d dígi ígi ígitos tos tienen un aspecto bastante diferente. En este caso se recomienda utilizar las llaves tal y como se muestra en la siguiente expresión regular:

[1-9][0-9]{0,9}

“9” que puede estar Al igual que en el ejemplo anterior, en p prime rime rimerr lu lugar gar gar, se requiere un n núme úme úmero ro del ““1” 1” al “9” seguido de ninguno o de h hasta asta nu nueve eve dígi dígitos tos del “0” al “9”, de modo que el resultado de la búsqueda pueda estar formado por hasta diez dígitos.

Ex Expre pre presió sió sión n rreg eg egula ula ularr ccon on un unaa ccan an antid tid tidaad al alea ea eator tor toria ia de rrep ep epet et eticio icio icione ne ness En los ejemplos vistos hasta ahora para expresiones de uno o varios elementos, se conocían las cantidades mínima y máxima de caracteres. Sin embargo, hay otros escenarios en los que no se puede determinar de antemano con exactitud la cantid cantidad ad de car caracte acte acteres res de una regex. Los parámetros necesarios son el asterisco (*) y el signo más (+), los cuales per permiten miten un unaa ccan an antidad tidad cu cualqu alqu alquier ier ieraa de rep repetic etic eticiones iones d de e un car carácte ácte ácter, r, u una na cclase lase o ggrup rup rupos os de ccara ara aractere ctere cteress. Se pueden registrar todas las cadenas de caracteres que tengan una cantidad cualquiera de dígitos (también “cero”), por ejemplo, con la siguiente expresión regular:

[0-9]*

Esto también es válido para la búsqueda de una comb combin in inaci aci ación ón cconcr oncr oncretad etad etade e ccarac arac aracter ter teres es en la que uno (o varios) caracteres pueden aparecer con una frecuencia cualquiera, tal y como se muestra en el siguiente ejemplo:

ab*

En este caso, los resultados son las palabras “a rrancar” y también “abrir”. En caso de que se deba ignorar el primer resultado o si el carácter especificado debe aparecer como mínimo una vez, entonces debe utilizarse el signo más:

ab+

Neg Negar ar cclas las lases es de ccar ar aract act acter er eres es Si se desean utilizar expresiones regulares con clases de caracteres que equivalen a uno o varios caracteres, pero al mismo tiempo se desea descartar como resultado a uno o varios caracteres determinados, entonces se

necesita utilizar la neg negaci aci ación ón “^ “^”” (acento circunflejo). Este signo se sitúa siempre dentro de los corchetes de una clase de caracteres, por lo que su validez se limita a los mismos. La siguiente instrucción es un buen ejemplo de una clase de caracteres en negación:

c[^o]sa

En este caso, el segundo carácter puede ser un carácter cualquiera excepto “o”, por lo que la palabra “ca asa” cumple con los criterios de coincidencia. Sin embargo, la palabra “co osa” no lo cumple.

Ma Marca rca rcad dor d de e pos posici ici ición ón Las expresiones regulares también permiten trabajar con marcadores de posición, los cuales equivalen a uno, varios o incluso ningún carácter (dependiendo del metacarácter utilizado) dentro de un patrón de búsqueda. El marcador de posición se gen genera era med median ian iante te u un np punt unt unto o combinado con el carácter especial citado antes para repeticiones, siempre y cuando se desee obtener un resultado de más de un único carácter. Este tipo de expresiones regulares permite, por ejemplo, buscar en una base de datos a una persona que, aunque se conoce por su nom nombr br bre e y ap apellid ellid ellido os, no se tiene la certeza de si se ha introducido incluyendo un segu segund nd ndo o no nomb mb mbre re re:

Juan.*Apellido

En este caso, los resultados pueden ser tanto “Juan Ant Antonio onio Apellido” (o cualquier otra combinación de segundo nombre) como “Juan A. Apellido” o “Juan Apellido”. Si solo deben tenerse en cuenta las vari varian an antes tes ccon on u un n segu segund nd ndo o nom nomb bre re, entonces deberá utilizarse un signo más en lugar del asterisco:

Juan.+Apellido

Un buen ejemplo de uso práctico de un mar marcad cad cador or d de e pos posici ici ición ón p para ara u un nú únic nic nico o car carácter ácter es el siguiente patrón de búsqueda, en el que las coincidencias pueden ser tanto “ca asa” como “co osa”:

c.sa

Alt Altern ern ernati ati ativas vas Las expresiones regulares también pueden formularse de tal manera que se ofrezcan dos o más coin coinciden ciden cidenci ci cias as alte alterna rna rnativas tivas tivas. La alternativa tiene validez usando como separación una barra vertical, tal y como se muestra en el siguiente ejemplo:

casa|cosa

En este caso, tanto “cas cas casa a” como “cosa” ofrecerán una coincidencia. Las alternativas también pueden formularse den dentro tro d de ep palab alab alabras ras o se secue cue cuencia ncia nciass d de e car caract act acteres eres mediante el uso de grupos:

(Lun|Mart|Miércol|Juev|Viern)es|Sábado|Domingo

En este ejemplo, cada uno de los días de la semana pueden ser un resultado pues, gracias a la agrupación mediante paréntesis, todos los días de la semana que acaban en “es” se registran correctamente, incluso si se usan de form formaa ab abre re reviad viad viadaa.

Gru Grupo po poss Los grupos de caracteres, como los del apartado anterior, son considerados clases de caracteres por los elementos estructurales de las expresiones regulares. Pueden definirse con un par de p parén arén aréntes tes tesis is y equivalen básicamente a un patrón compuesto por uno o varios caracteres. En el sentido estricto de la palabra, cada regex es un grupo, pero en este caso se obvia la caracterización mediante paréntesis. Dentro de las expresiones, los grupos permiten aplicar oper operad ad adores ores tal tales es ccomo omo el d delim elim elimita ita itador dor o el sign signo o de re repet pet petición ición (sig (signo no más o as aster ter terisco isco isco)) en un unaa ex expres pres presión ión parc parcial ial espe específic cífic cíficaa:

ab(cd)+

En este caso, la repetición aleatoria que se busca también será válida para el grupo de caracteres “cd” pero, si se prescinde de los paréntesis, solo será válida para “d”. Dentro de una regex no hay límites para la cantidad de grupos incluidos.

An Anida ida idam mient ientos os Una expresión regular no solo puede albergar una cantidad cualquiera de grupos, sino que también permite anid anidar ar tant tantos os gr grup up upos os ccom om omo o se d dese ese esee e para expresar designaciones complejas entre caracteres individuales y

caracteres especiales sin necesidad de usar cadenas de caracteres excesivamente largas. Un ejemplo es el siguiente patrón regex, con el cual se pueden obtener como posible resultado los cuatro modelos de automóvil “VW Golf”, “VW Polo”, “Fiat Punto” o “Fiat Panda”:

(VW (Golf|Polo)|Fiat (Punto|Panda))

Lím Límite ite d de ep pala ala alabr br braa Cuando, al aplicar una expresión regular, deban tenerse en cuenta los límites de palabra, esto es, el inic inicio io o el final de u un na sec secuen uen uencia cia alfan alfanum um uméric éric éricaa, entonces se deberán especificar mediante el uso de metacaracteres. Muchos lenguajes utilizan para esto la combinación “\b”, la cual se puede anteponer, agregar o posponer al patrón de búsqueda. La primera variante determina que la secu secuen en encia cia d de eb búsq úsq úsqued ued uedaa esté al p princ rinc rincipi ipi ipio o de la p palab alab alabra ra:

\bcaso

Una coincidencia para esta expresión regular es, por ejemplo, la palabra “casona”. Por el contrario, la palabra “acas cas caso o” se excluye de los resultados debido a que el carácter que se ha buscado tiene delante la letra “a”. Para el caso contrario, se puede utilizar la segunda variante y agregar el carácter especial:

caso\b

Con la tercera opción, ambos límites de palabra se convierten en requisito imprescindible; en el caso del ejemplo utilizado, el único resultado posible es la palabra “caso caso caso”:

\bcaso\b

Qu Quita ita itarr m met et etasig asig asign nifica ificado do d de e ca cara ra racte cte ctere re ress eesp sp specia ecia eciale le less En el apartado anterior, la barra diagonal inversa garantiza que la “b” colocada después no se va a utilizar como letra, sino como metacarácter. Si se combina con caracteres considerados por defecto como uno de los caracteres especiales sintácticos regex, entonces tendrá exactamente el efecto opuesto: el cará carácter cter se cons consider ider iderar ar aráá com como ou un n liliter ter teral al com común ún ún. Gracias a esta opción, también se puede buscar sin problemas una fecha concreta usando una expresión regular:

11\.10\.2019

En este caso, la fecha “11.10.2019” es la única cadena de caracteres que coincide con los criterios de búsqueda especificados. Si no se coloc colocaa llaa bar barra ra d diag iag iagona ona onall in invers vers versaa, los dos puntos se considerarían marcadores de posición para un carácter cualquiera, por lo que también se ofrecerían resultados del tipo “110 01092019” o “11aa10b b2019”.

“M “Mod od odera era erar” r” ex expre pre presio sio sione ne ness rreg eg egular ular ulares es aamb mb mbicio icio iciosas sas El uso de cuantificadores (“?”, “+”, “*”, “{}”) garantiza por d defe efe efecto cto que una expresión sea “ambiciosa” y que, por tanto, busque la ma mayor yor coinc coincide ide idenci nci nciaa pos posible ible ible. Como este comportamiento no siempre es deseable, los cuantificadores se pueden especificar en una expresión regular de tal manera que se modere esa “ambición”. Este proceso de modificación se muestra claramente en el siguiente ejemplo:

A.*B

Si se aplica en la secuencia de caracteres “ABCDEB”, esta expresión no para la búsqueda tras “AB”, sino que engloba como resultado toda la secuencia de caracteres. Si, por el contrario, la búsq búsqueda ueda se debe can cancel cel celar ar jus justo to tras la p prim rim rimera era “B” “B”, entonces se necesita la modi modificaci ficaci ficación ón indicada. Para ello, en muchas de las lenguas (entre otras Perl, Tcl, HTML) se coloca detrás una marca de interrogación:

A.*?B

Como alternativa, la expresión original también se puede sustituir por la siguiente expresi expresión ón eequ qu quivale ivale ivalente nte y “n “no o amb ambicios icios iciosaa”, para así obtener el mismo resultado:

A[^B]*B

Eje Ejem mplo Pr Prac ac actic tic tico o Supongamos que en la universidad se nos asignan matriculas que consisten en una letra al inicio (R o S) ma mayús yús yúscul cul culas as o guion( on( on(-) -) y terminar con un numero de 4 dí min minusc usc uscula ula ulass que indican si es de horario regular o sabatino, seguido de un gui dígitos gitos como op por or eje ejemplo mplo S-0 S-0500 500 o r-00 r-0025 25 entre 1 y 999 9999 9 el primero valor admitido debe ser 0001 y el máximo 9999,, com Iniciaremos analizando el siguiente patrón

[RS]-[0123456789]{4}

Este patrón significa -en un lenguaje natural- lo siguiente:   

empezar por una letra que puede ser R ó S seguir con un guion simple continuar con números entre el 1 y 9999 (formados de 4 digitos)

Los corchetes [ ] indican un conj conjunto unto d de e ca carac rac ractere tere teress, un dominio (si hablamos de teoría de conjuntos), significa que sólo los caracteres de ese conjunto pueden usarse, y no otros. Si no se especifica la cantidad de estos caracteres, se asume que sólo se refiere a una (1) posición, un sólo carácter del conjunto. En este ejemplo, o R o S … pero no las dos, y no puede omitirse. Seguidamente vemos un gui guión ón ón. Cuando no colocamos corchetes [ ], ni otros símbolos de agrupación, la presencia de...


Similar Free PDFs