使用正则表达式过滤列表

Har*_*ila 7 python regex python-2.7

我认为这是一项简单的任务,但我是 regex 的新手,所以无法弄清楚。我想过滤一个包含以下内容的列表:“ANY”-“ANY”-“ANY”

输入:

List1 = ["AB.22-01-01", "AB.33-01-44", "--4", "AA.44--05", "--"]
Run Code Online (Sandbox Code Playgroud)

输出:

List2 = ["AB.22-01-01", "AB.33-01-44"]
Run Code Online (Sandbox Code Playgroud)

每个项目将包含两个“-”,但我只想获取“-”两侧带有文本的项目。

Eri*_*ire 21

使用re 模块试试这个:

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) ]
Run Code Online (Sandbox Code Playgroud)


sty*_*ane 6

您可以使用正则表达式。它将返回所有不包含的元素--

>>> import re
>>> pat = re.compile(r'^((?!--).)*$')
>>> [i for i in List1 if pat.match(i)]
['AB.22-01-01', 'AB.33-01-44']
Run Code Online (Sandbox Code Playgroud)

Demo