用于剥离电子邮件的VB.Net REGEX

时间:2012-12-13 17:49:54

标签: regex vb.net email

我需要从纯文本段中删除电子邮件地址。我用Google搜索并搜索了这个网站并找到了很多建议 - 我都无法开展工作。我正在使用这样的代码:

Imports System.Text.RegularExpressions

        Dim strEmailPattern As String = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$"       
        Dim senText As String = "blah blah blah blah blah someone@somewhere.com"  
        Dim newText As String = String.Empty

        newText = Regex.Replace(senText, strEmailPattern, String.Empty)

在调用Regex.Replace之后,newText字符串仍然包含完整的senText字符串,包括电子邮件。我以为这是我正在使用的正则表达式模式,但我尝试了很多,所以也许我在代码中遗漏了一些东西?

2 个答案:

答案 0 :(得分:1)

这个posix正则表达式应该匹配所有提供的电子邮件

  1. 它们可能无效
  2. 每封电子邮件至少包含@
  3. @符号周围有一系列字符,包括字母,数字,连字符和点,而不是由任何非字母字符开头。
  4. 所有电子邮件至少由一个空格字符分隔。
  5. 正则表达式

    ([[:alpha:]][[:alnum:].-]+@)+[[:alpha:]][[:alnum:].-]+
    

    这可能也有效

    ([a-zA-Z][[a-zA-Z0-9].-]+@)+[a-zA-Z][a-zA-Z0-9.-]+
    

    较短的版本(如评论中)将是

    (\w[\w.-]+@)+\w[\w.-]+
    

    但是这会匹配更多无效的电子邮件。

    我正在处理的模式将匹配大多数电子邮件地址。如果您确实想要匹配所有符合RFC-822的电子邮件,请考虑使用pattern here。它是一个6425字符长的正则表达式,匹配所有标准的电子邮件地址。但是要洁具,它会执行得很慢!

答案 1 :(得分:-1)

你的正则表达式失败会有各种各样的极端情况。

你应该像这个一样简单

(?<=^|\s)[^@]+?\@[^@]+?(?=$|\s)