【发布时间】:2017-11-17 06:05:12
【问题描述】:
我有一个带有单个组的正则表达式,我想使用它将字符串列表映射到匹配的字符串的过滤匹配列表。目前,我正在使用以下内容:
matches = (re.findall(r'wh(at)ever', line) for line in lines)
matches = [m[0] for m in matches if m]
我怎样才能更优雅地做到这一点,只使用过滤器、地图和理解?显然,我可以使用 for 循环,但我想知道它是否可以纯粹通过操作迭代器来完成。
【问题讨论】:
-
你是在这里只操作迭代器,你只是在寻找一个单线?
-
matches = [m[0] for m in (re.findall(r'wh(at)ever', line) for line in lines) if m] -
您可以使用
from functools import partial和from operator import itemgetter并拥有非常实用的list(map(itemgetter(0), filter(None, map(partial(re.findall, r'wh(at)ever'), lines))))...但我仍然认为您的原始构造更优雅。 -
如果你只想要第一项,为什么要使用
re.findall? -
@CasimiretHippolyte 有更好的选择吗?如果是这样,请告诉我:)
标签: python regex functional-programming iterator generator