Csharp/C#教程:使用正则表达式检测文本中的电子邮件分享


使用正则表达式检测文本中的电子邮件

我希望以文本格式检测电子邮件,以便我可以在锚点上使用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

(0)
上一篇 2022年1月4日
下一篇 2022年1月4日

精彩推荐