使用正则表达式过滤列表 [重复]

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

【讨论】:

以上是关于使用正则表达式过滤列表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 使用正则表达式过滤掉字母 [重复]

在 dart 中使用动态全词匹配正则表达式过滤列表

JavaScript正则表达式过滤两个字符之间的文本[重复]

正则表达式特殊符号及用法

使用正则表达式过滤文本

Python正则表达式过滤匹配模式的字符串列表