Regex re.findall может извлечь только половину данных - PullRequest
0 голосов
/ 07 мая 2019

Я использую regext, чтобы найти все адреса электронной почты от str, но иногда адрес электронной почты удаляется и возвращается только часть одного адреса.

import re

regex=r'(\w{1,}((\.|_|-|\w)[\w]){0,}@\w{1,}((\.|_|-|\w)[\w]){0,}\.\w{1,})'

str2fetch='''


wwwr@h.com.h.ki.l =》1  #==》wwwr@h.com.h.ki

sdfsd

2@mail2.4.sdu.edu.cn.u.163.com #=>2@mail2.4.sdu.edu.cn

0@0.0
1@1.1.1
1@123434.22222.333.4444.com
AAAAAA2@p.2-t.2.3o.2.abcd4 #=>aaaaaa2@p.2-t.2.3o

AAAAAA2@p.2t.2.3o.2.abcd4   #=>aaaaaa2@p.2t

AAAAAA2@p.2-t.2p.3o.2.abcd4  #=>aaaaaa2@p.2-t.2p

DAAAAAA2@p.2p-t.2.3o.2.abcd4  #=>daaaaaa2@p.2p

3@3.3.3.3.3
4@4.4.4.4.4.4
'''
emailList=list(set(re.findall(regex,str2fetch.lower())))

print(emailList)

Левая часть является предполагаемым результатом, однако, правильный результат дается.

wwwr@h.com.h.ki.l =》1  #==》wwwr@h.com.h.ki

AAAAAA2@p.2-t.2.3o.2.abcd4 #=>aaaaaa2@p.2-t.2.3o

AAAAAA2@p.2t.2.3o.2.abcd4   #=>aaaaaa2@p.2t

AAAAAA2@p.2-t.2p.3o.2.abcd4  #=>aaaaaa2@p.2-t.2p

DAAAAAA2@p.2p-t.2.3o.2.abcd4  #=>daaaaaa2@p.2p

1 Ответ

0 голосов
/ 07 мая 2019
regex = r'(\w{1,}((\.|_|-|\w)[\w]){0,}@\w{1,}((\.|_|-|\w)[\w]){0,}\.\w{1,})'
    a='\w{1,}'  #any digital or alphabet with length >1
    b='((\.|_|-|\w)[\w]){0,}'    #started by dot|_|-|any digital/alphabet str, +any digital/alphabet str
    c='@'
    d='\w{1,}'  #any digital or alphabet with length >1
    e='((\.|_|-|\w)[\w]){0,}'  #started by dot|_|-|any digital/alphabet str, +any digital/alphabet str
    f='\.\w{1,}' #dot+any digital or alphabet with length >1 
...