使用正则表达式查询集合
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']
>>> 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
如您所见,使用 map
和 filter
可使速度加快 0.38
微秒。
但是,如果考虑可读性, 更好。 (在那种情况下,这是另一种方法)
我有一组字符串,我想询问它所有包含的元素,这些元素与特定的 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']
>>> 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
如您所见,使用 map
和 filter
可使速度加快 0.38
微秒。
但是,如果考虑可读性,