繁体   English   中英

Python-正则表达式-查找所有重复项

[英]Python - Regex - findall duplicates

我正在尝试使用python中的以下代码匹配html文本中的电子邮件

my_second_pat = '((\w+)( *?))(@|[aA][tT]|\([aA][tT]\))(((( *?)(\w+)( *?))(\.|[dD][oO][tT]|\([dD][oO][tT]\)))+)([eE][dD][uU]|[cC][oO][mM])'


matches = re.findall(my_second_pat,line)
for m in matches:
    s = "".join(m)
    email = "".join(s.split())
    res.append((name,'e',email))

当我在line = shoham@stanford.edu上运行它时line = shoham@stanford.edu

我得到:

[('shoham', 'shoham', '', '@', 'stanford.', 'stanford.', 'stanford', '', 'stanford', '', '.', 'edu')]

我所期望的:

[('shoham','@', 'stanford.', 'edu')]

它在regexpal.com上作为一个字符串匹配,所以我想我在re.findall上遇到麻烦

我是regex和python的新手。 欢迎进行任何优化/修改。

它与您的所有捕获组都匹配,其中包含可选匹配项。


尝试这个:

((?:(?:\w+)(?: *?))(?:@|[aA][tT]|\(?:[aA][tT]\))(?:(?:(?:(?: *?)(?:\w+)(?: *?))(?:\.|[dD][oO][tT]|\(?:[dD][oO][tT]\)))+)(?:[eE][dD][uU]|[cC][oO][mM]))

请参阅以下链接调试表达式:

http://regex101.com/r/jW4mP1

尝试这个:

(?i)([^@\s]{2,})(?:@|\s*at\s*)([^@\s.]{2,})(?:\.|\s*dot\s*)([^@\s.]{2,})

正则表达式可视化

Debuggex演示

如果您需要限制.com.edu

(?i)([^@\s]{2,})(?:@|\s*at\s*)([^@\s.]{2,})(?:\.|\s*dot\s*)(com|edu)

正则表达式可视化

Debuggex演示

注意,我在正则表达式的开头使用了不区分大小写的标志(?i) ,而不是使用[Ee]这样的语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM