Python regex extraire des répertoires du chemin d'accès

J'ai une question à propos de regex/Python. Désolé si ce sujet a été discuté des millions de fois, d'habitude je trouve les réponses sur so/google etc. mais je suis coincé dans les millions de réponses avec celui-ci.. (Pour être honnête, je suis propriétaire d'une regex livre, mais de toute façon je suis trop stupide pour comprendre vraiment...)

Pour une musique de système de gestion j'ai besoin d'extraire des informations de chemins d'accès, mise à disposition de différents ensembles d'options. Voici deux exemples:

Si le chemin d'accès est: (Cas 1)

"/The Prodigy/The Fat Of The Land/04 - Funky Stuff.flac"

il doit extraire:

  • artiste: "Le Prodige"
  • de presse: "La Graisse De La Terre"
  • Tracknumber: 4
  • Titre: "Funky Stuff"

Et pour exemple: (Cas 2)

"/[XLR 483] The Fat Of The Land/04 - The Prodigy - The  Funky Stuff.flac"

extraire:

  • catno: "XLR 483"
  • de presse: "La Graisse De La Terre"
  • Tracknumber: 4
  • artiste: "Le Prodige"
  • Titre: "Funky Stuff"

Il n'est pas nécessaire pour une regex qui couvre les deux cas, ce sont juste deux exemples. Je vais leur donner que des options (ou de point de départ pour ajouter propre).

Toute aide serait grandement appréciée!

@ S. Lott: je n'ai pas de regex pour cela, j'ai commencé avec le fractionnement de la chaîne:

parts = rel_path.split('/')       
track = parts[-1]
release = parts[-2]
artist = parts[-3]

mais cela ressemble à un extrêmement rigides et peu élégante solution pour moi.

edit:

Pour l'instant j'ai quelque chose comme:

pattern = re.compile('^/(?P<artist>[a-zA-Z0-9 ]+)/(?P<release>[a-zA-Z0-9 ]+)/(?P<track>[a-zA-Z0-9 -_]+).[a-zA-Z]*.*')


rel_path = '/The Prodigy/The Fat Of The Land/04 - Funky Stuff.flac'

match = pattern.search(rel_path)

artist = match.group('artist')
release = match.group('release')
track = match.group('track')
Étape 1. Post le regexs que vous utilisez et les problèmes que vous rencontrez. Nous pouvons vous aider, mais nous n'aimons pas l'écriture de code pour vous. Post le regex et ce qui va mal avec chacun d'eux.
Quel est le problème avec le fractionnement de la chaîne? Il fonctionne, non?
S. Lott - il rien de mal à se fendre, mais il est difficile d'avoir le modèle modifiable (le code à l'extérieur). J'aimerais fournir (modifiable) des presets dans une interface d'administration.
a-zA-Z?? Pourquoi n'êtes-vous pas utiliser l'Unicode?
Comme indiqué ci-dessus - peut-être parce que je ne suis pas assez intelligent pour le comprendre... 🙂

OriginalL'auteur ohrstrom | 2012-02-13