est-il un moyen de correspondre à un modèle (e\d\d
) plusieurs fois, capturant chacun dans un groupe? Par exemple, étant donné la chaîne ..Regex et une séquence de motifs?
blah.s01e24e25
..Je souhaitent obtenir quatre groupes:
1 -> blah
2 -> 01
3 -> 24
4 -> 25
La regex évidente à utiliser est (en Python regex:
import re
re.match("(\w+).s(\d+)e(\d+)e(\d+)", "blah.s01e24e25").groups()
. .mais je veux aussi faire correspondre l'un des éléments suivants:
blah.s01e24
blah.s01e24e25e26
Vous ne pouvez pas sembler faire (e\d\d)+
, ou plutôt vous pouvez, mais il ne capture que la dernière occurrence:
>>> re.match("(\w+).s(\d+)(e\d\d){2}", "blah.s01e24e25e26").groups()
('blah', '01', 'e25')
>>> re.match("(\w+).s(\d+)(e\d\d){3}", "blah.s01e24e25e26").groups()
('blah', '01', 'e26')
Je veux faire en une seule regex parce que j'ai plusieurs modèles pour correspondre les noms de fichiers d'épisode TV, et ne veulent pas dupliquer chaque expression pour gérer plusieurs épisodes:
\w+\.s(\d+)\.e(\d+) # matches blah.s01e01
\w+\.s(\d+)\.e(\d+)\.e(\d+) # matches blah.s01e01e02
\w+\.s(\d+)\.e(\d+)\.e(\d+)\.e(\d+) # matches blah.s01e01e02e03
\w - \d+x\d+ # matches blah - 01x01
\w - \d+x\d+\d+ # matches blah - 01x01x02
\w - \d+x\d+\d+\d+ # matches blah - 01x01x02x03
..et ainsi de suite pour de nombreux autres modèles. Autre chose pour compliquer les choses - Je souhaite stocker ces expressions régulières dans un fichier de configuration, donc une solution utilisant plusieurs expressions régulières et appels de fonctions n'est pas souhaitée - mais si cela s'avère impossible, je vais juste permettre à l'utilisateur d'ajouter des expressions rationnelles simples
Fondamentalement, il est un moyen pour capturer un motif de répétition en utilisant regex?