0

我需要从纯文本段落中删除电子邮件地址。我用谷歌搜索并搜索了这个网站,发现了很多建议——我都无法开始工作。我正在使用这样的代码:

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 字符串,包括电子邮件。我认为这是我使用的正则表达式模式,但我尝试了很多,所以也许我在代码中遗漏了一些东西?

4

2 回答 2

1

此 posix 正则表达式应匹配所有电子邮件,前提是

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

正则表达式

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

这也可能有效

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

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

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

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

我正在解决的模式将与大多数电子邮件地址匹配。如果您真的想匹配所有符合 RFC-822 的电子邮件,请考虑使用此处的模式。它是一个匹配所有标准电子邮件地址的 6425 个字符长的正则表达式。但请注意,它会执行缓慢!

于 2012-12-13T18:01:39.150 回答
-1

There are various corner cases where your regex would fail..

you should use as simple as this

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

于 2012-12-13T17:55:35.867 回答