用正则表达式查询集合

2024-09-27 00:22:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组字符串,我想问它所有包含的元素,匹配一个特定的正则表达式。例如:

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

这将返回:

['abcd', 'abdd']

有办法吗?你知道吗


Tags: 字符串元素ababcdset办法findallabdd
3条回答

循环集合中的所有元素,并对正则表达式进行筛选:

>>> s = {'abcd', 'abdd', 'acdd'}
>>> r = [el for el in s if re.search('ab.d', el)]
>>> r
['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

如您所见,使用mapfilter可以使它快0.38微秒。你知道吗

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

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

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

相关问题 更多 >

    热门问题