2015-11-27 6 views
-1

Я думаю, что это непростая задача, но я новичок в регулярном выражении, поэтому не могу понять это. Я хочу, чтобы отфильтровать список, содержащий что-то вроде этого: "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"] 

Каждый элемент содержит два «-», но я хочу только получить текст с каждой стороны «-».

+0

И что регулярные выражения вы пробовали? Возможно, вам даже не нужно регулярное выражение. Почему бы не использовать 'filter (lambda x: len (x.split ('-')) == 3 и все (x.split ('-')), List1)'? – Maciek

ответ

2

Попробуйте это с помощью 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) ] 
+0

Тот, который был наиболее понятным (для меня) и более чем в два раза быстрее, чем некоторые другие решения (не пробовал все) со списком из более чем 100 предметов – Harila

1

Вы можете использовать регулярные выражения. Она возвращает все элементы, которые не содержит --

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

Demo

Смежные вопросы