LINUX.ORG.RU

Удалить элементы из списка удовл. рег. выражению

 


1

1

Приветствую! Помогите пожалуйста разобраться, почему код не работает как надо.

Есть список:

[('1 (BODY[HEADER.FIELDS (Subject)] {29}', 'Subject: Scan from Raffael\r\n\r\n'), ' RFC822.SIZE 289845 UID 17761)', 
('2 (BODY[HEADER.FIELDS (Subject)] {38}', 'Subject: do your work\r\n\r\n'), ' RFC822.SIZE 2637 UID 18022)', 
('3 (BODY[HEADER.FIELDS (Subject)] {24}', 'Subject: IP Adress\r\n\r\n'), ' RFC822.SIZE 67875 UID 18050)']

Хочется удалить из списка все элементы содержащие: «RFC822.SIZE <размер> UID <номер>)»

Я пытаюсь делать так:

 regexp= re.compile(r'( RFC822.SIZE) * (\d{1,9}) UID (\d{1,9}\))')
 filtered_subjects = filter(lambda a: a != regexp , subjects)

Если вместо regexp подставить точный текст, то он удаляется. С регулярным выражением нет. Поправьте пожалуйста.

★★★

Ответ на: комментарий от x0r

что-то не так:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
TypeError: expected string or buffer

hope13 ★★★
() автор топика
Ответ на: комментарий от hope13
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> a=('111','222','aaa','333')
>>> regexp=re.compile('[0-9]+')
>>> filter(lambda a:regexp.search(a),a)
('111', '222', '333')
>>>
anonymous
()
Ответ на: комментарий от anonymous

Попробуй теперь с моими списком.

hope13 ★★★
() автор топика
Ответ на: комментарий от hope13

пиши тогда функцию, которая будет смотреть на тип элемента. Если строка то дёргаешь re, если кортеж - делаешь map с этой же ф-ей на кортеж

mashina ★★★★★
()
Ответ на: комментарий от hope13

так у тебя же все записи матчатся по регекспу

x0r ★★★★★
()
#!/usr/bin/python

import re

subjects =\
[('1 (BODY[HEADER.FIELDS (Subject)] {29}', 'Subject: Scan from Raffael\r\n\r\n'), ' RFC822.SIZE 289845 UID 17761)',.
 ('2 (BODY[HEADER.FIELDS (Subject)] {38}', 'Subject: do your work\r\n\r\n'), ' RFC822.SIZE 2637 UID 18022)',.
 ('2 (BODY[HEADER.FIELDS (Subject)] {38}', 'Subject: do your work\r\n\r\n'), ' RFC822.SIZE 2637 UID 180w22)',.
 ('3 (BODY[HEADER.FIELDS (Subject)] {24}', 'Subject: IP Adress\r\n\r\n'), ' RFC822.SIZE 67875 UID 18050)']
regexp= re.compile(r'( RFC822.SIZE) * (\d{1,9}) UID (\d{1,9}\))')

def group(a):
    lst = []
    for i in a:
        lst.append(i)
        if len(lst)==2:
            yield lst
            lst = []
def ungroup(a):
    for i in a:
        for j in i:
            yield j

filtered_subjects = list(ungroup(filter(lambda a: regexp.search(a[1]), group(subjects))))
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.