【发布时间】:2012-01-18 13:00:57
【问题描述】:
我在 C# 中有一个正则表达式来检测文本中的电子邮件,然后我在其中放置了一个带有 mailto 参数的锚标记以使其可点击。但是,如果电子邮件已经在锚标记中,则正则表达式会检测到锚标记中的电子邮件,然后下一个代码会在其上放置另一个锚标记。 Regex 中有什么方法可以避免已经在锚标签中的电子邮件?
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>";
所以,这里的重点是正则表达式应该只检测那些不在锚标签内或已经可点击的有效电子邮件,也不应该是锚标签内的锚标签的 href 值。
上面给出的正则表达式正在检测文本中所有可能不需要的电子邮件。
【问题讨论】:
-
嗨@zapthedingbat,我试过你的代码,但它仍然检测到3封电子邮件,但它应该只检测到一个。你能在你的电脑上试试吗?我是编程新手,我只能在我的 Visual Studio 编辑器中复制和测试。您的正则表达式在上面给出的示例测试文本中检测到 3 个匹配项。