我需要使用简单的通配符匹配两个字符串:
"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)
答案 0 :(得分:6)
这应该适合你:
def is_match(a, b):
aa = a.split('.')
bb = b.split('.')
if len(aa) != len(bb): return False
for x, y in zip(aa, bb):
if not (x == y or x == '*' or y == '*'): return False
return True
工作原理:
.
上的输入。*
,这也算作成功匹配。答案 1 :(得分:0)
万一其他人偶然发现这个帖子(就像我一样),我建议使用" fnmatch"模块(参见https://www.safaribooksonline.com/library/view/python-cookbook-3rd/9781449357337/ch02s03.html)进行字符串匹配。