2013-03-06 2 views
-4

я разработал и применение для сбора любого типа писем из файлов типов: [email protected] ishani (в) dit.dolly.lk ishani в CS точке тележки точка EduEmail урожай с питоном

Но проблема выводится на некоторые дополнительные элементы в списке, отличном от извлеченного полного сообщения электронной почты. Я не понимаю, почему. Я пытался в различных ways.I думаю, что проблема в моем регулярном выражении или логика

вот мой код

data=f.read() 

    regexp_email = r'(([\w]+)@([\w]+)([.])([\w]+[\w.]+))|(([\w]+)(\(at\))([\w]+)([.])([\w]+[\w.]+))|(([\w]+)(\sat\s)([\w-]+)(\sdot\s)([\w]+(\sdot\s[\w]+)))' 
    pattern = re.compile(regexp_email) 
    emailAddresses = re.findall(pattern, data) 

    print emailAddresses 

выход как этот

[('[email protected]', 'ishani', 'sliit', '.', 'lk', '', '', '', '', '', '', '', '', '', '', '', '', ''), ('', '', '', '', '', 'ishani(at)dit.sliit.lk', 'ishani', '(at)', 'dit', '.', 'sliit.lk', '', '', '', '', '', '', ''), ('', '', '', '', '', '', '', '', '', '', '', 'ishani at cs dot dolly dot edu', 'ishani', ' at ', 'cs', ' dot ', 'dolly dot edu', ' dot edu')] 

но Im ожидая вывод такой как

['[email protected]','ishani(at)dit.dolly.lk','ishani at cs dot dolly dot edu'] 

Есть ли какой-либо метод, который кто-либо пытался, который поддерживает мою проблему?

ответ

0

Изменить regexp_email к этому:

r'[\w][email protected][\w]+[.][\w]+[\w.]+|[\w]+\(at\)[\w]+[.][\w]+[\w.]+|[\w]+\sat\s[\w-]+\sdot\s[\w]+\sdot\s[\w]+' 

Кажется, что вам не нужны группы захвата, поэтому я удалил их все.

Вы также не нуждаетесь в [] вокруг \w если \w все, что вам нужно указать:

r'\[email protected]\w+[.]\w+[\w.]+|\w+\(at\)\w+[.]\w+[\w.]+|\w+\sat\s[\w-]+\sdot\s\w+\sdot\s\w+' 
+0

В вашем решении сводится к символу. Но я ожидаю весь адрес электронной почты в одном элементе списка вот так ['[email protected]', 'ishani (at) dit.dolly.lk', 'ishani at cs dot dolly dot edu'] – Ishani702

+0

@ Ishani702: Он делает то, что вы хотите. О чем ты говоришь? – nhahtdh

+0

ваши результаты отображаются следующим образом: ['n', 'u', 'w', 'a', 'n', '@', 's', 'l', 'i', 'i', 't ','. ',' l ',' k ',' n ',' u ',' w ',' a ',' n ',' (',' a ',' t ',') ',' 'd', 'i', 't', '.', 's', 'l', 'i', 'i', 't', '.', 'l', 'k', 'n ',' u ',' w ',' a ',' n ',' ',' a ',' t ',' ',' c ',' s ',' ',' d ',' o ' , 't', '', 's', 'l', 'i', 'i', 't', '', 'd', 'o', 't', '', 'e', ​​' 'd', 'u'] то, что я ожидаю, это так ['[email protected]', 'ishani (at) dit.dolly.lk', 'ishani at cs dot dolly dot edu'] – Ishani702

-1

Вы можете просто пропустить пробелы

print [e for ea in emailAddresses for e in ea if e] 

, который производит

['[email protected]', 'ishani', 'sliit', '.', 'lk', 'ishani(at)dit.sliit.lk', 'ishani', '(at)', 'dit', '.', 'sliit.lk', 'ishani at cs dot dolly dot edu', 'ishani', ' at ', 'cs', ' dot ', 'dolly dot edu', ' dot edu'] 

, который не является точно, что вы просили ...

+0

есть ли другой способ, чтобы извлечь что-то, кроме моего пути электронных писем ...? – Ishani702

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