使用正则表达式过滤列表 [重复]
Posted
技术标签:
【中文标题】使用正则表达式过滤列表 [重复]【英文标题】:Filter list with regex [duplicate] 【发布时间】:2016-03-01 19:55:11 【问题描述】:我认为这是一项简单的任务,但我是正则表达式的新手,所以无法弄清楚。我想过滤包含以下内容的列表:“ANY”-“ANY”-“ANY”
输入:
List1 = ["AB.22-01-01", "AB.33-01-44", "--4", "AA.44--05", "--"]
输出:
List2 = ["AB.22-01-01", "AB.33-01-44"]
每个项目将包含两个“-”,但我只想获取“-”两边都有文本的项目。
【问题讨论】:
你尝试过哪些正则表达式?也许你甚至不需要正则表达式。为什么不使用filter(lambda x: len(x.split('-')) == 3 and all(x.split('-')), List1)
?
【参考方案1】:
使用re module 试试这个:
import re
p = re.compile('^.+-.+-.+$')
l1 = ["AB.22-01-01", "AB.33-01-44", "--4", "AA.44--05", "--"]
l2 = [ s for s in l1 if p.match(s) ]
【讨论】:
最容易理解的一个(对我来说)并且比其他一些解决方案(没有尝试所有)的速度快两倍以上,包含 100 多个项目【参考方案2】:您可以使用正则表达式。它将返回所有不包含 --
>>> import re
>>> pat = re.compile(r'^((?!--).)*$')
>>> [i for i in List1 if pat.match(i)]
['AB.22-01-01', 'AB.33-01-44']
Demo
【讨论】:
以上是关于使用正则表达式过滤列表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章