【发布时间】:2016-10-12 22:27:32
【问题描述】:
如果我有一个字符串列表strlst 和一个正则表达式列表rexlst,那么过滤掉strlst 的每个元素的最pythonic 方法是什么,其中 none rexlst 中的正则表达式匹配?因此,只要 rexlst 中的一个常规 erpressions 与 strlst 中的一个字符串匹配,这个特定的字符串就应该包含在输出列表中。 添加的复杂性* 是,我想要 **strlst 首先 的那些元素 由 rexlst 中的第一个正则表达式匹配,然后是那些与第二个匹配的元素,依此类推
一个非常简单的例子:
import re
strlst = ['aaaaaa', '1234', 'bbbbb', '------', '.+/4-3', 'a1b2c3']
rexlst = [re.compile(x) for x in [r'^[a-z]+$', r'^\d+$']]
想要的结果是输出列表:
outlst = ['aaaaaa', 'bbbbb', '1234']
它应该适用于任何strlst 和reglist 的任意组合。加号是一种相当有效且简短的解决方案。
我能想到的最好的方法是:
outlist = filter(lambda x: any([True if r.match(x) else False for r in rexlst]), strlst)
但这给出了错误的顺序,即它保留了字符串在strlst中出现的顺序:
outlst = ['aaaaaa', '1234', 'bbbbb']
【问题讨论】: