Hilo oficial: Solicitudes de Expresiones Regulares

Iniciado por WHK, 8 Mayo 2015, 21:53 PM

0 Miembros y 1 Visitante están viendo este tema.

WHK

Yo llegué hasta acá:

http://regexr.com/3buj9
/(.*)?\s+-\s+(.+)?(featuring\s.*|feat\s.*|feat\..*)/ig

Entre intentar buscar los que dicen o no dicen feat y los que tienen guion al comienzo y los que no, llegué a la conclusión de que era necesario por lo menos 3 expresiones distintas para poder hacer match y dependiendo del match hacer el reemplazo. Ya es tarde, mañana veré si les doy una mano porque ando hasta el cuello con trabajos.

Eleкtro

#21
Muchas gracias WHK, probaré esa expresión.

De todas formas la solución actual que tengo ahora mismo es con esta expresión, en la cual me ayudaron a construirla:
^(.+)\s+-\s+(.+?)\s+[fF](t|eat(uring)?)?\.?([^([\])\n]+)(.+)?$

Pero hay un problema, según parece es imposible construir una expresión regular que sea 100% eficiente debido a la cantidad de guiones y espacios que pueden contener los nombres de archivos (como yo decía al principio), al menos eso es lo que me dijo el que me ayudó con esa expresión, entonces yo mismo desarrollé el siguiente script en pascal-script para ignorar los nombres de archivos que contengan más de un " - " ya que la eficiencia para estos renombramientos de archivo necesito que sea perfecta, prefiero omitir reemplazamientos y revisar manualmente los nombres que se omitieron.

Estoy convencido que si alguien suele descargar archivos de audio, entonces esta expresión, o la de @Explorer y la de @WHK les podrá servir de mucha ayuda!.

(este script se utiliza con la aplicación Renamer Pro: http://www.den4b.com/?x=products )
Código (pascal) [Seleccionar]
// Formats an audio filename that has the "...featuring artist" part at the end of filename.
//------------------------------------------------------------------------------------------


// Pseudo-Example:
//
// From: [0]ARTIST_NAME  [1]DASH  [2]TRACK_TITLE  [3]FEAT_ARTIST  [4]POSSIBLE_ADDITIONAL_INFO_INSIDE:()[]{}
// To:   [0]ARTIST_NAME  [3]FEAT_ARTIST  [1]DASH  [2]TRACK_TITLE  [4]POSSIBLE_ADDITIONAL_INFO_INSIDE:()[]{}

// Real-Example:
//
// From: Carbin & Sirmark - Sorry Feat. Sevener.mp3
// To:   Carbin & Sirmark Feat. Sevener - Sorry.mp3

// Known limitations:
//
// • If [0]ARTIST_NAME or [2]TRACK_TITLE parts contains any " - " the script will not work properlly.
//   By default the script prevents any replacement on that kind of filenames, so don't worry.


var
 rgxPattern: string;
 rgxReplace: string;
 dashCount: integer;
 baseName: string;
 extension: WideString;

begin

 baseName  := WideExtractBaseName(FileName)
 extension := WideExtractFileExt(FileName);

 // The regular expression that matches the filename parts.
 // http://stackoverflow.com/questions/32807698/regex-pattern-to-limit-dashes-in-these-circumstances
 rgxPattern := '^(.+)\s+-\s+(.+?)\s+[fF](t|eat(uring)?)?\.?([^([\])\n]+)(.+)?$'
 rgxReplace := '$1 Feat.$5 - $2$6'

 // The amount of " - " that contains the filename.
 dashCount := high(MatchesRegEx(baseName, '\s-\s' , false));

 // If only one " - " is found then...
 If (dashCount = 0) Then
   begin // Do the replacement.
     baseName := ReplaceRegEx(baseName, rgxPattern, rgxReplace, false, true)
     FileName := baseName + extension;
   end;

end.


Saludos!








ThinkByYourself

#22
Hola!

Hace tiempecillo que no se toca este hilo.

El caso es que busco la expresión de regular de la expresión regular de javascript en javascript.

Me sería de mucha ayuda, y la verdad que es una búsqueda que en gogle no me se da bien...

A ver si alguien me sabe decir.

Un saludo!
No te voy a engañar.
Todos hemos sido programados para normalizar la psicopatía de las élites económicas y políticas, y para realimentar su patrón de ciega codicia.

#!drvy

CitarEl caso es que busco la expresión de regular de la expresión regular de javascript en javascript.

¿Podrías poner ejemplos o explicarlo mejor? Eso no tiene mucho sentido.

Saludos

ThinkByYourself

Claro! La expresión regular sería para encontrar expresiones regulares de js en un string. Pero la expresión regular tendría que servir como RegExp de js. Las que al vuelo simplemente /miregex/g.
No te voy a engañar.
Todos hemos sido programados para normalizar la psicopatía de las élites económicas y políticas, y para realimentar su patrón de ciega codicia.

WHK

#25

ThinkByYourself

#26
Si, algo así, pero debería cubrir todas las opciones. Lo tricky viene cuando:

/\\\// --> debería pasar
/\\/ --> debería pasar
/\\\/ --> no debería pasar porque no está cerrada

Y tengo mis dudas. Se debe hacer con los operadores especiales supongo, de ? y !, que no los pillo porque en unos sitios van y en otros no.
Sólo puede cerrarse con /, pero no valdría decirle [^/]+.
Sería algo que aceptara \/ o cualquier cosa que no sea / hasta encontrar /.

(Que en verdad no sería eso, porque dentro de [ y ] el / creo que sí se puede poner. Y ahí se vuelve un poco locura. Pero yo la he visto esa regex. Existe xD).

La solución que das es la que tengo provisional. A ver si la encuentro




Estoy desde el móvil. Pero la encontré. Aquí está:



Lo que pasa que está escrita en CoffeeScript, ojo. Para js hay que adaptarla.

Pro esta debería ser, la regex de las regex de js.


Saludos!

MOD: Imagen redimensionada a lo permitido.
Mod: No hacer doble post.
No te voy a engañar.
Todos hemos sido programados para normalizar la psicopatía de las élites económicas y políticas, y para realimentar su patrón de ciega codicia.

Miseryk

Buenas, estaba buscando una expresión que no sé como terminarla, para no volver a postear todo, lo había posteado acá por error: https://foro.elhacker.net/scripting/regex-t484967.0.html
Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!