elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Doble factor de autenticación o verificación en dos pasos


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderador: Eleкtro)
| | |-+  Hilo oficial: Solicitudes de Expresiones Regulares
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Hilo oficial: Solicitudes de Expresiones Regulares  (Leído 3,285 veces)
WHK
吴阿卡
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.732


The Hacktivism is not a crime


Ver Perfil WWW
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #20 en: 8 Octubre 2015, 05:24 »

Yo llegué hasta acá:

http://regexr.com/3buj9
Código:
/(.*)?\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.


En línea

Eleкtro
Novato Astral y
Moderador Global
***
Desconectado Desconectado

Mensajes: 8.630


El sentido común es el menos común de los sentidos


Ver Perfil
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #21 en: 8 Octubre 2015, 12:52 »

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:
Código:
^(.+)\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
  1. // Formats an audio filename that has the "...featuring artist" part at the end of filename.
  2. //------------------------------------------------------------------------------------------
  3.  
  4.  
  5. // Pseudo-Example:
  6. //
  7. // From: [0]ARTIST_NAME  [1]DASH  [2]TRACK_TITLE  [3]FEAT_ARTIST  [4]POSSIBLE_ADDITIONAL_INFO_INSIDE:()[]{}
  8. // To:   [0]ARTIST_NAME  [3]FEAT_ARTIST  [1]DASH  [2]TRACK_TITLE  [4]POSSIBLE_ADDITIONAL_INFO_INSIDE:()[]{}
  9.  
  10. // Real-Example:
  11. //
  12. // From: Carbin & Sirmark - Sorry Feat. Sevener.mp3
  13. // To:   Carbin & Sirmark Feat. Sevener - Sorry.mp3
  14.  
  15. // Known limitations:
  16. //
  17. // • If [0]ARTIST_NAME or [2]TRACK_TITLE parts contains any " - " the script will not work properlly.
  18. //   By default the script prevents any replacement on that kind of filenames, so don't worry.
  19.  
  20.  
  21. var
  22.  rgxPattern: string;
  23.  rgxReplace: string;
  24.  dashCount: integer;
  25.  baseName: string;
  26.  extension: WideString;
  27.  
  28. begin
  29.  
  30.  baseName  := WideExtractBaseName(FileName)
  31.  extension := WideExtractFileExt(FileName);
  32.  
  33.  // The regular expression that matches the filename parts.
  34.  // http://stackoverflow.com/questions/32807698/regex-pattern-to-limit-dashes-in-these-circumstances
  35.  rgxPattern := '^(.+)\s+-\s+(.+?)\s+[fF](t|eat(uring)?)?\.?([^([\])\n]+)(.+)?$'
  36.  rgxReplace := '$1 Feat.$5 - $2$6'
  37.  
  38.  // The amount of " - " that contains the filename.
  39.  dashCount := high(MatchesRegEx(baseName, '\s-\s' , false));
  40.  
  41.  // If only one " - " is found then...
  42.  If (dashCount = 0) Then
  43.    begin // Do the replacement.
  44.      baseName := ReplaceRegEx(baseName, rgxPattern, rgxReplace, false, true)
  45.      FileName := baseName + extension;
  46.    end;
  47.  
  48. end.

Saludos!


« Última modificación: 8 Octubre 2015, 12:55 por Eleкtro » En línea


hsk75rv

Desconectado Desconectado

Mensajes: 24



Ver Perfil
Re: Hilo oficial: Solicitudes de Expresiones Regulares
« Respuesta #22 en: 4 Enero 2017, 03:27 »

Hola WHK  :D

He estado intentando casi durante 3 horas una expresión regular en Python que sea capaz de solo, hacer MATCH cuando, dada una cadena de caracteres, solo coincida cuando hay menos o igual de 3 caracteres iguales seguidos;
Por ejemplo AAAABBB, tendría que no hacer MATCH dado que hay 4 AAAAs.
pero por ejemplo AAABBAAABBB tendría que hacer MATCH dado que no hay ningún caracter repetido más de 4 veces, sin embargo no doy con la regexp concreta.

Gracias !!
En línea

Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Expresiones Regulares?
Programación General
Choclito 2 1,956 Último mensaje 4 Marzo 2010, 21:59
por BEATMASTER
Expresiones Regulares + Php wtf!
PHP
Shell Root 4 2,232 Último mensaje 29 Marzo 2010, 01:24
por Castg!
expresiones Regulares
.NET
Choclito 3 3,523 Último mensaje 1 Mayo 2010, 05:09
por raul338
Expresiones Regulares
Programación General
Psyke1 9 2,367 Último mensaje 1 Junio 2010, 02:12
por SeC
expresiones regulares
Dudas Generales
m@o_614 1 487 Último mensaje 22 Junio 2014, 18:41
por NikNitro!
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines