2009-05-28 11 views
3

Imaginez si vous voulez la chaîne suivante:Regex pour extraire le nom du film du nom de fichier

« Un film (1999) DVDRip.avi »

Je cherche à extraire la chaîne « un grand film » de ceci via regex, mais luttant pour obtenir la regex correcte pour ceci.

Je serais en train d'utiliser ceci aussi pour analyser des noms de fichiers de différentes longueurs.

merci!

+0

Je sais que cela avait été demandé depuis longtemps, mais J'ai récemment développé une [bibliothèque] python (https://github.com/divijbindlish/parse-torrent-name) pour cette tâche. Cela devrait aider. –

Répondre

4

Cette syntaxe est conçue autour de l'analyseur regex .NET (peut être différent dans d'autres moteurs regex):

^(?<MovieName>.+)\((?<Year>\d+)\)(?<AdditionalText>[^\.]*)\.(?<Extension>[^\.]*)$ 

Vous pouvez utiliser cette syntaxe pour sortir les données que vous voulez:

string line = "Movie Text"; 
Match match = Regex.Match(line); 
match.Groups["MovieName"].Value; 

Vous pouvez également retirer l'Année, supplémentaire Texte et extension si vous en avez besoin.

+0

C'est parfait pour moi. Vous venez de me sauver beaucoup de travail! Merci! –

1

En supposant que le support est précédée d'un espace:

^(.+)\s\(.+ 
0

Accorde à tout jusqu'à la première tranche

^([^(]+) 

plus rapide (légèrement) que l'option de Ben

Python:

>>> import re 
>>> re.compile("^([^(]+)").match("A Great Movie (1999) DVDRip.avi").groups() 
('A Great Movie ',) 
Questions connexes