使用正则表达式检测文本中的电子邮件
我希望以文本格式检测电子邮件,以便我可以在锚点上使用mailto标记在其上放置锚标记。 我有它的正则表达式,但代码还检测已经由锚标记封装或在锚标记mailto参数内的电子邮件。
我的正则表达式是:
([w-]+(.[w-]+)*@([a-z0-9-]+(.[a-z0-9-]+)*?.[az]{2,6}|(d{1,3}.){3}d{1,3})(:d{4})?)
但它在以下示例文本中检测到3个匹配项:
ttt someemail@mail.com abc email@email.com
我希望只有email@email.com才能与正则表达式匹配。
与我之前对你的其他问题的回答非常相似,试试这个
(?]*>))(b[w-]+(.[w-]+)*@([a-z0-9-]+(.[a-z0-9-]+)*?.[az]{2,6}|(d{1,3}.){3}d{1,3})(:d{4})?)
唯一真正不同的是电子邮件开头之前的边界b
。
在Regexr上看到一个类似的表达式,它不完全相同,因为Regexr不支持外观中的交替和无限长度。
将HTML的解析保留为适合的内容(例如HtmlAgilityPack )并将其与正则表达式结合以更新文本节点是一个更好的主意:
string sContent = "ttt someemail@mail.com abc email@email.com"; string sRegex = @"([w-]+(.[w-]+)*@([a-z0-9-]+(.[a-z0-9-]+)*?.[az]{2,6}|(d{1,3}.){3}d{1,3})(:d{4})?)"; Regex Regx = new Regex(sRegex, RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture); HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(sContent); var nodes = doc.DocumentNode.SelectNodes("//text()[not(ancestor::a)]"); foreach (var node in nodes) { node.InnerHtml = Regx.Replace(node.InnerHtml, @"$0"); } string fixedContent = doc.DocumentNode.OuterHtml;
我注意到你也在其他论坛上发布了同样的问题,但没有在其中任何一个中指定答案。
只需在左括号后插入一个 s +,如下所示:
(s+[w-]+(.[w-]+)*@([a-z0-9-]+(.[a-z0-9-]+)*?.[az]{2,6}|(d{1,3}.){3}d{1,3})(:d{4})?)
通过这种方式,您只能在空格后收到电子邮件,忽略mailto:
或结束标记( >
)之后的mailto:
。
上述就是C#学习教程:使用正则表达式检测文本中的电子邮件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1019288.html