如何使用[at]和[dot]来刮取受保护的电子邮件地址

2024-04-19 22:50:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在python3和beautifulsoup4中用[at]和[dot]删除受保护的电子邮件地址 我的代码在这里:

email = soup(text=re.compile(r'[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*'))

_emailtokens = str(email).replace("\\t", "").replace("\\n", "").split(' ')

if len(_emailtokens):
    print([match.group(0) for token in _emailtokens for match in [re.search(r"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)", str(token.strip()))] if match])

输出我的代码(检测到的每一封普通电子邮件都会被废弃并作为输出引入):

info@abcd.com

我需要用以下样式删除受保护的电子邮件:

info [at] abcd.com
info@abcd [dot] com
info [at] abcd [dot] com
And etc.

我想得到所有这些风格(改为正常风格)像一个正常的电子邮件(例如。info@abcd.com)你知道吗


Tags: 代码reinfocom电子邮件emailmatchdot
1条回答
网友
1楼 · 发布于 2024-04-19 22:50:01

首先,非担保声明:您将在本网站上找到用于验证电子邮件地址的正则表达式(请参见How to validate an email address using a regular expression?)。它们非常复杂。不用说,您的基本正则表达式将识别有效电子邮件地址的子集,但我们将以此为基础。基本正则表达式现在变成:

r'[a-z0-9.+-]+(@|\s*\[\s*at\s*\]\s*)[a-za-z0-9._-]+(\.|\s*\[\s*dot\s*\]\s*)[a-z]*'

flag re.IGNORECASE编译,以便,例如,atAT被同等地识别。此正则表达式还允许灵活的间距,如下面的示例代码所示:

import re

emails = """info [at] abcd.com
info@abcd [dot] com
info [at] abcd [dot] com
INFO [ AT ] ABCD[ DOT ]COM"""

regex = re.compile(r'[a-z0-9.+-]+(@|\s*\[\s*at\s*\]\s*)[a-za-z0-9._-]+(\.|\s*\[\s*dot\s*\]\s*)[a-z]*', flags=re.IGNORECASE)
for m in regex.finditer(emails):
    print(m.group(0))

印刷品:

info [at] abcd.com
info@abcd [dot] com
info [at] abcd [dot] com
INFO [ AT ] ABCD[ DOT ]COM

相关问题 更多 >