gpt4 book ai didi

c# - 用于检测文本电子邮件的正则表达式

转载 作者:行者123 更新时间:2023-11-30 15:40:42 27 4
gpt4 key购买 nike

我在 C# 中有一个正则表达式来检测文本中的电子邮件,然后我在其中放置了一个带有 mailto 参数的 anchor 标记以使其可点击。但是,如果电子邮件已经在 anchor 标记中,则正则表达式会检测 anchor 标记中的电子邮件,然后下一个代码会在其上放置另一个 anchor 标记。正则表达式中有什么方法可以避免 anchor 标记中已经存在的电子邮件吗?

C# 中的正则表达式代码是:

string sRegex = @"([\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?)";

Regex Regx = new Regex(sRegex, RegexOptions.IgnoreCase);

示例文本是:

string sContent = "ttt <a href='mailto:someone@example.com'>someemail@mail.com</a> abc email@email.com";

所需的输出是:

"ttt <a href='mailto:someone@example.com'>someemail@mail.com</a> abc <a href='mailto:email@email.com'>email@email.com</a>";

所以,这里的重点是 Regex 应该只检测那些不在 anchor 标记内或已经可点击的有效电子邮件,并且 anchor 标记的 href 值也不应该在 anchor 标记内。

上面给出的正则表达式正在检测文本中所有可能不需要的电子邮件。

最佳答案

你能不能用一个负面的后视来测试 mailto:

(?<!mailto\:)([\w-]+(.[\w-]+)@([a-z0-9-]+(.[a-z0-9-]+)?.[a-z]{2,6}|(\d{1,3}.){3}\d{1,3})(:\d{4})?)

应该匹配前面没有 mailto: 的任何内容

我认为正在发生的事情是 .([\w\-]+(.[\w-])+)匹配太多。你是不是想用 .而不是 \.

通过转义 .以下代码产生

someemail@mail.com
email@email.com


public void Test()
{

Regex pattern = new Regex(@"\b(?<!mailto:)([\w\-]+(\.[\w\-])*@([a-z0-9-]+(.[a-z0-9-]+)?.[a-z]{2,6}|(\d{1,3}.){3}\d{1,3})(:\d{4})?)");
MatchCollection matchCollection = pattern.Matches("ttt <a href='mailto:someone@example.com'>someemail@mail.com</a> abc email@email.com");
foreach (Match match in matchCollection)
{
Debug.WriteLine(match);
}
}

您尝试做的事情在现实世界中的实现可能看起来更像这样

Regex pattern = new Regex(@"(?<!mailto\:)\b[\w\-]+@[a-z0-9-]+(\.[a-z0-9\-])*\.[a-z]{2,8}\b(?!\<\/a)");
MatchCollection matchCollection = pattern.Matches("ttt <a href='mailto:so1meone@example.com'>someemail@mail.com</a> abc email@email.com");
foreach (Match match in matchCollection)
{
Debug.WriteLine(match);
}

抱歉,你是对的,我没有考虑到否定断言不够贪婪。

\b(?!mailto\:)([\w-]+(.[\w-]+)@([a-z0-9-]+(.[a-z0-9-]+)?.[a-z]{2,6}|(\d{1,3}.){3}\d{1,3})(:\d{4})?)

应该可以

关于c# - 用于检测文本电子邮件的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8910514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com