代码之家  ›  专栏  ›  技术社区  ›  ts.

与通配符匹配的字符串

  •  1
  • ts.  · 技术社区  · 14 年前

    "oh.my.*" 比赛 "*.my.life" "oh.my.goodness" "*.*.*" "in.my.house"

    唯一的通配符是*,它替换任何字符(减号)的字符串

    我现在使用的regex有一些代码-我想更简单一些会更好:

    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)
    
    2 回复  |  直到 14 年前
        1
  •  6
  •   Mark Byers    14 年前

    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
    

    工作原理:

    • .
    • 如果参数具有不同数量的组件,则会立即失败。
    • 否则,遍历组件并检查是否相等。
    • * 这也算是一场成功的比赛。
        2
  •  0
  •   kenneho    8 年前

    为了防止其他人偶然发现这个线程(像我一样),我建议使用“fnmatch”模块(参见 https://www.safaribooksonline.com/library/view/python-cookbook-3rd/9781449357337/ch02s03.html