使用正则表达式查询集合

Query a set with an regex

我有一组字符串,我想询问它所有包含的元素,这些元素与特定的 RegEx 相匹配。例如:

set = set(['abcd', 'abdd', 'acdd'])
set.findAll('ab.d')

这应该return:

['abcd', 'abdd']

有办法吗?

遍历集合中的所有元素,并根据正则表达式进行过滤:

>>> s = {'abcd', 'abdd', 'acdd'}
>>> r = [el for el in s if re.search('ab.d', el)]
>>> r
['abcd', 'abdd']

您可以在列表理解中使用 re.search :

>>> s=set(['abcd', 'abdd', 'acdd'])
>>> [i for i in s if re.search(r'ab.d',i)]
['abcd', 'abdd']

这可以使用 map and filter 来完成,如

>>> s = {'abcd', 'abdd', 'acdd'}
>>> pat = re.compile('ab.d')
>>> map(lambda x:x.string,filter(None, map(pat.search,s)))
['abcd', 'abdd']

请注意,map 在微观上比列表推导式更快。

bhargav@bhargav:~$ python -m timeit "import re;s = {'abcd', 'abdd', 'acdd'};[el for el in s if re.search('ab.d', el)]"
100000 loops, best of 3: 4.59 usec per loop
bhargav@bhargav:~$ python -m timeit "import re;s = {'abcd', 'abdd', 'acdd'};pat = re.compile('ab.d'); map(lambda x:x.string,filter(None, map(pat.search,s)))"
100000 loops, best of 3: 4.21 usec per loop

如您所见,使用 mapfilter 可使速度加快 0.38 微秒。

但是,如果考虑可读性, 更好。 (在那种情况下,这是另一种方法)