正则表达式从文本中提取域和电子邮件(不包括域作为电子邮件地址的一部分)[关闭]

问题描述 投票:0回答:1

我是新来的,如果有任何想法,我将非常感激......

我需要一个正则表达式来从文本中提取域和电子邮件。提取电子邮件没有问题,但域使任务变得更加棘手。

以下文为例:

[电子邮件受保护]、google.com、www.msn.com[电子邮件受保护][电子邮件受保护]、somesite.com、bbc.co.uk

使用正则表达式

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}
,我设法正确提取电子邮件([电子邮件受保护][电子邮件受保护][电子邮件受保护])。但是,我不知道如何修改此类 REGEX 以便它也能找到域。我在 StackOverflow 中做了一些研究,但我发现的多个 REGEX 不能满足我的需求 - 它们在电子邮件地址中查找域。

总结:我需要找到一个可以在文本中查找域和电子邮件的正则表达式。但是,域不能位于电子邮件地址内,域的形式可以是“co.uk”,也可以是二级域+根域。

任何想法表示赞赏。

谢谢!

python regex dns
1个回答
0
投票

您需要的是 (1) 查找电子邮件地址,以及 (2) 查找域名。这两个正则表达式分别满足每个要求:

  • 电子邮件(您已经有了):
    [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}
  • 域名
    \b(?:https?:\/\/)?(?:www\.)?([a-zA-Z0-9-]+(?:\.[a-zA-Z]{2,})+)\b

值得注意的是,最后一个正则表达式确实在电子邮件地址中找到了“域”。因此,您可以使用

|
运算符连接两个正则表达式,这样,如果它找到电子邮件地址,则不会同时找到其中的域:

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}|\b(?:https?:\/\/)?(?:www\.)?([a-zA-Z0-9-]+(?:\.[a-zA-Z]{2,})+)\b

在示例字符串上执行它(查看https://regex101.com/r/ECxH3p/1),上面的正则表达式发现:

希望这有帮助!愿代码与您同在...

© www.soinside.com 2019 - 2024. All rights reserved.