2009-09-01 8 views
1

Je suis en train de créer une regex en C# pour extraire le titre artiste, numéro de piste et de la chanson à partir d'un nom de fichier nommé comme: 01.artist - titre.mp3Problème créer au regex nom

En ce moment, je peux » t obtenir la chose au travail, et j'ai des problèmes à trouver beaucoup d'aide pertinente en ligne.

Voici ce que j'ai jusqu'à présent:

string fileRegex = "(?<trackNo>\\d{1,3})\\.(<artist>[a-z])\\s-\\s(<title>[a-z])\\.mp3"; 
Regex r = new Regex(fileRegex); 
Match m = r.Match(song.Name); // song.Name is the filname 
if (m.Success) 
{ 
    Console.WriteLine("Artist is {0}", m.Groups["artist"]); 
} 
else 
{ 
    Console.WriteLine("no match"); 
} 

Je ne reçois aucun match du tout, et toute l'aide est appréciée!

Répondre

2

Vous pouvez mettre l 'avant les <> dans tous vos groupes, et mettre un signe + après votre [a-z]' s, comme suit:?

string fileRegex = "(?<trackNo>\\d{1,3})\\.(?<artist>[a-z]+)\\s-\\s(?<title>[a-z]+)\\.mp3"; 

Ensuite, il devrait fonctionner. Les? Sont requis pour que le contenu des parenthèses inclinées <> soit interprété comme un nom de groupe, et les + doivent correspondre à une ou plusieurs répétitions du dernier élément, qui est n'importe quel caractère entre (et y compris) az ici.

0

Peut-être essayer:

"(?<trackNo>\\d{1,3})\\.(<artist>[a-z]*)\\s-\\s(<title>[a-z]*)\\.mp3"; 
1

Vos groupes d'artistes et titre sont correspondent pas exactement à un caractère. Essayez:

"(?<trackNo>\\d{1,3})\\.(?<artist>[a-z]+\\s-\\s(?<title>[a-z]+)\\.mp3" 

Je recommande vraiment http://www.ultrapico.com/Expresso.htm pour construire des expressions régulières. C'est génial et gratuit.

P.S. j'aime taper mon string regex littérales comme ceci:

@"(?<trackNo>\d{1,3})\.(?<artist>[a-z]+\s-\s(?<title>[a-z]+)\.mp3" 
+0

+1 pour le lien Expresso – TLiebe

0

CODE

String fileName = @"01. Pink Floyd - Another Brick in the Wall.mp3"; 
String regex = @"^(?<TrackNumber>[0-9]{1,3})\. ?(?<Artist>(.(?!= -))+) - (?<Title>.+)\.mp3$"; 

Match match = Regex.Match(fileName, regex); 

if (match.Success) 
{ 
    Console.WriteLine(match.Groups["TrackNumber"]); 
    Console.WriteLine(match.Groups["Artist"]); 
    Console.WriteLine(match.Groups["Title"]); 
} 

SORTIE

 
01 
Pink Floyd 
Another Brick in the Wall