Мне нужно сопоставить две строки с простыми подстановочными знаками:
"oh.my.*"
соответствует "*.my.life"
, "oh.my.goodness"
и "*.*.*"
, но не "in.my.house"
Единственный подстановочный знак*, который заменяет строку любого символа (минус.)
Я думал об использовании fnmatch, но он не принимает подстановочные знаки в имени файла.
Есть некоторый код с регулярным выражением, который я используюсейчас - что-то попроще было бы лучше, я думаю:
def notify(self, event, message):
events = []
r = re.compile(event.replace('.','\.').replace('*','[^\.]+'))
for e in self._events:
if r.match(e):
events.append(e)
else:
if e.find('*')>-1:
r2 = re.compile(e.replace('.','\.').replace('*','[^\.]+'))
if r2.match(event):
events.append(e)
for event in events:
for callback in self._events[event]:
callback(self, message)