Find Y Problema Con Las Expresiones Regulares


Objetivo: Find Y Problema Con Las Expresiones Regulares
Buenas!.

Pues el problema que me encontré fue que usando expresiones regulares por ejemplo con un juego llamado:
Impossible Mission también existía Impossible Mission II

A la hora de buscar Impossible Mission

find . -regex '\(.*Impossible Mission.*\)$*.tzx'


Salida:

Citar:

./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission II (1988)(US Gold)[b].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission II (19xx)(Kixx)(Side A)[Re-Release].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission II (1988)(US Gold).tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold)[a].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Ricochet)[Re Release].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Compulogical - US Gold)(Es).tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission II (19xx)(Kixx)(Side B)[Re-Release].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1987)(Erbe - US Gold)(Es).tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold).tzx


Entonces, ¿ como podía mostrar solo su primera parte ?.

Impossible Mission II tiene un espacio después del nombre y los caracteres II
Me interesa que se muestre cualquier línea que incluya Impossible Mission más un espacio y que no se muestre uno o más caracteres "I" y al final que la extensión tenga .tzx

Traduciéndolo a expresión regular.

find . -regex '\(.*Impossible Mission\s[^I]+\)$*.tzx'


Citar:

./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold)[a].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Ricochet)[Re Release].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Compulogical - US Gold)(Es).tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1987)(Erbe - US Gold)(Es).tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold).tzx


. Cualquier caracter
.* Repite un caracter hasta donde le digamos
\s espacio en blanco
[I] Coincide con ese caracter
[^I] No coincide con ese caracter.
+ y * son casi parecidos.
$ coincide al final de la línea

Y ahora aprovechando las expresiones regulares para encontrar tres juegos usé:
El asterisco se podría haber sustituido por el signo "+"

find . -regex '\(.*Impossible Mission\s[^I].*\|.*Kendo.*\|.*Jetpac.*\)$*.tzx'


Salida:

Citar:

./Ordenadores/8bits/Spectrum/Coleccion/Tzx/J/Jetpac (1983)(Ultimate)[a2].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/J/Jetpac (1983)(Ultimate).tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/J/Jetpac (1983)(Ultimate)[a].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/K/Kendo Warrior (1989)(Byte Back)[Re-Release].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/K/Kendo Warrior (1989)(Byte Back).tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold)[a].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Ricochet)[Re Release].tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(Compulogical - US Gold)(Es).tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1987)(Erbe - US Gold)(Es).tzx
./Ordenadores/8bits/Spectrum/Coleccion/Tzx/I/Impossible Mission (1985)(US Gold).tzx


Sin expresiones regulares:

find . -type f \( -iname "*impossible*" -not -iname "*II*" -o -iname "JetPac*" -o -iname "kendo w*" \) -and -name \*.tzx


Con expresiones regulares. Añadamos también que quiero mostrar solo archivos.

find . -type f -regex '\(.*Impossible Mission\s[^I].*\|.*Kendo.*\|.*Jetpac.*\)$*.tzx'


Cuestión de costumbres y usar el más adecuado. El primer método es más largo y no es complicado, el segundo es más corto y algo enrevesado.

Saludos

Objetivo: Re: Find Y Problema Con Las Expresiones Regulares
Hola

Te recomiendo esta página de expresiones regulares, está muy bien explicado todo (en inglés, of course). El autor de la web es el desarrollador de la aplicación que vende y que sirve para aprender y manejar regex, muy útil pero sólo para usuarios de Windows. Lo importante es conocer el funcionamiento de las expresiones regulares y su uso en distintos lenguajes de programación, cuyas diferencias estriban en la forma en la que se integra con el lenguaje en cuestión y sus caracteres de escape.

https://www.regular-expressions.info/tutorial.html

Saludos

Perfil MP  
Objetivo: Re: Find Y Problema Con Las Expresiones Regulares
Jesús:

Creo que se te olvidó el enlace de la página.

Las expresiones regulares las comencé a ver e un curso de Python en su día en Coursera.
Ahora mucho de los cursos hay que pagarlos, los que son especialización. Al igual que en CodeAcademy.
(Que tengo que buscar uno de introducción a C++ para compartir el enlace con vosotros.)

Luego al usarlos con comandos de Linux, no he notado demasiada diferencia en las instrucciones.
Si acaso como se deben usar en cada lenguaje.

También lo he usado en gambas, con alguna pequeña limitación de no existir a veces similitudes con Python.
Aunque no lo uso mucho, tengo instalado el programa "Kiki" ...(mal pensados!).

Saludos

Objetivo: Re: Find Y Problema Con Las Expresiones Regulares
Oops! Editado el mensaje con el enlace

Añado un par de recursos para probar y aprender su uso:

https://regexr.com/ Es una página donde se pueden probar y analizar expresiones. Tiene una base de datos de usuarios para distintos casos muy útil.

visual-regexp Es un programa que se puede instalar en distribuciones basadas en Debian/Ubuntu, mediante apt.

Saludos

Perfil MP  
Objetivo: Re: Find Y Problema Con Las Expresiones Regulares
Jesús:

Gracias.

De visual-regxep parece construido con la librería tcl/tk.

https://wiki.tcl-lang.org/page/Visual+REGEXP

Y también hacen referencia a Emacs.

https://www.emacswiki.org/emacs/VisualRegexp

Saludos


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.085s (PHP: 3% SQL: 97%)
Consultas SQL: 18 - Debug off - GZIP Activado