【问题标题】: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)

标签: python regex python-2.7


【解决方案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

【讨论】:

    猜你喜欢
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2015-04-16
    • 2018-10-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    相关资源
    最近更新 更多