Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式:在列表中搜索_Python_Regex - Fatal编程技术网

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
是什么?@rbatt
r.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(模式、向量或名称)