import re def match_rules(filename, rules): for r in rules: match = r.apply(filename) if match: return r, match return None class FileRule: def __init__(self, rule, conf): # trouve les marqueurs dans la règle reg = re.compile(r'#(.+?)#') self.patterns = reg.findall(rule) rg = reg.sub(lambda m:self.regFor(match=m, conf=conf), rule) self.rule = re.compile(rg) print(self.patterns, self.rule) @staticmethod def regFor(match, conf): name = match.group(0) if name == '#EXT#': return '('+'|'.join(conf.extensions)+')' return '([^/]+)' def apply(self, filename): # applique la règle à un objet file match = self.rule.match(filename) if not match: return None # trouve les différents marqueurs de règle patterns = {} for i in range(len(self.patterns)): patterns[self.patterns[i]] = match.group(i+1) return patterns