使用正则表达式作为 python 的“in”关键字的搜索字符串

假设我有一本路径集字典:


my_dict['some_key'] = {'abc/hi/you','xyz/hi/you','jkl/hi/you'}

我想看看这条路径是否出现在这个集合中。如果我有完整的路径,我只需执行以下操作:


str = 'abc/hi/you'

if str in my_dict['some_key']:

    print(str)

但如果我不知道和b之间是什么怎么办?如果它实际上可以是任何东西呢?如果我是在一个壳里,我就会把它收起来。acls*


我想要做的是让 str 成为 regx:


regx = '^a.*c/hi/you$' #just assume this is the ideal regex. Doesn't really matter.

if regx in my_dict['some_key']:

    print('abc/hi/you') #print the actual path, not the regx

实现这样的事情的干净、快速的方法是什么?


人到中年有点甜
浏览 130回答 2
2回答

不负相思意

您需要循环遍历集合而不是简单的调用。为了避免为示例设置整个集合字典,我将其抽象为简单的 my_set。import remy_set = {'abc/hi/you','xyz/hi/you','jkl/hi/you'}regx  = re.compile('^a.*c/hi/you$')for path in my_set:    if regx.match(path):        print(path)我选择编译而不是仅仅re.match()因为该集合在实际实现中可能有超过 100 万个元素。

开心每一天1111

您可以set子类化该类并实现a in b运算符import refrom collections import defaultdictclass MySet(set):  def __contains__(self, regexStr):    regex = re.compile(regexStr)    for e in self:      if regex.match(e):        return True    return Falsemy_dict = defaultdict(MySet)my_dict['some_key'].add('abc/hi/you')regx = '^a.*c/hi/you$'if regx in my_dict['some_key']:    print('abc/hi/you')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python