正则表达式: 在列表中搜索

我想根据正则表达式筛选列表中的字符串。

还有什么比 [x for x in list if r.match(x)]更好的吗?

329870 次浏览

您可以使用以下方法在 Python 3.x 中创建 迭代器或在 Python 2.x 中创建 名单:

filter(r.match, list)

要将 Python 3.x 迭代器转换为一个列表,只需将其强制转换为: list(filter(..))

完整示例(Python 3) :
对于 Python 2.x,请查看下面的 Note

import re


mylist = ["dog", "cat", "wildcat", "thundercat", "cow", "hooo"]
r = re.compile(".*cat")
newlist = list(filter(r.match, mylist)) # Read Note below
print(newlist)

印刷品:

['cat', 'wildcat', 'thundercat']

注:

对于 Python 2.x 开发人员,filter已经返回了一个列表。在 Python 3. x filter被修改为返回一个迭代器,所以它必须被转换为 list(为了看到它很好地打印出来)。

Python 3代码示例
Python 2.x 代码示例

为了在不首先编译正则表达式的情况下完成此操作,请使用 lambda函数,例如:

from re import match


values = ['123', '234', 'foobar']
filtered_values = list(filter(lambda v: match('^\d+$', v), values))


print(filtered_values)

返回:

['123', '234']

filter()只是接受一个 callable作为它的第一个参数,并返回一个列表,其中该可调用函数返回一个“ truthy”值。