Python 正则表达式:在列表中搜索
我想根据正则表达式筛选列表中的字符串Python 正则表达式:在列表中搜索,python,regex,Python,Regex,我想根据正则表达式筛选列表中的字符串 有什么比[x for x in list if r.match(x)]更好的方法吗?您可以使用以下方法在Python 3.x中创建迭代器,或在Python 2.x中创建列表: filter(r.match, list) 要将Python3.x迭代器转换为列表,只需强制转换它列表(过滤器(..)完整示例(Python 3): 对于Python2.x,请查看下面的注释 import re mylist = ["dog", "ca
有什么比
[x for x in list if r.match(x)]
更好的方法吗?您可以使用以下方法在Python 3.x中创建迭代器,或在Python 2.x中创建列表:
filter(r.match, list)
要将Python3.x迭代器转换为列表,只需强制转换它<代码>列表(过滤器(..)完整示例(Python 3):对于Python2.x,请查看下面的注释
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']
注意: 对于Python2.x开发人员,已经返回了一个列表。In被更改为返回迭代器,因此必须将其转换为
列表
(以便看到它被很好地打印出来)
要在不首先编译正则表达式的情况下执行此操作,请使用
lambda
函数-例如:
从重新导入匹配
值=['123','234','foobar']
筛选的_值=列表(筛选(lambda v:match(“^\d+$”,v),值))
打印(过滤的_值)
返回:
['123',234']
filter()
只是将一个callable
作为它的第一个参数,并返回一个列表,其中该可调用函数返回了一个“truthy”值。实际上,列表理解通常比函数构造(如filter、reduce、lambda、,等等@Ivo:它们通常更受欢迎,因为它们通常更清晰、更简洁。但是,在这种情况下,过滤器
版本非常清晰,噪音也小得多。这里的r.match
是什么?@rbattr.match
是一种方法,当应用于给定字符串时,可以查找正则表达式是否与该字符串匹配(如果是,则返回相应的匹配对象,但在本例中这并不重要,因为我们只关心结果是否真实)嗨,当我运行上述代码时,我得到了
我做错了什么?根据python文档(python 2.7.12):过滤器返回的是列表而不是对象。您还可以检查代码:(只需点击运行)谢谢。我正在Mac电脑上使用Python 3.5.2。我尝试了你的链接。当然可以,尽管我不知道为什么会收到这样的消息。我甚至删除了str
,因为filter
返回了一个列表,但没有用…@joshua你现在可能已经明白了,但是试试print(list(newlist))
或print([I for I in newlist]))
这太难了。这就是为什么R更优秀的原因。只需grep(模式、向量或名称)