VBA正则表达式删除除电子邮件地址以外的所有内容

时间:2016-04-12 15:50:51

标签: regex vba

我正在尝试清理一串电子邮件地址:

  

bruce.wayne@batcave.com;#30; #clarke.kent@dailyplanet.com;#32; #the.joker@arkhamassylum.com;#33

我不知道列表中会有多少封电子邮件,而且数字也会改变长度。

我试过了:

(?!([\w-]+\.)[\w-]+@([\w-]+\.)+[\w;]+)

作为模式,但不起作用。

这一切都在VBA中完成。

3 个答案:

答案 0 :(得分:3)

您不需要正则表达式来执行此操作。

您的地址以",#"字符串分隔。使用Split函数将字符串拆分为值数组。然后迭代数组,只打扰包含@字符的条目。

下面的代码产生了这个输出:

bruce.wayne@batcave.com
clarke.kent@dailyplanet.com
the.joker@arkhamassylum.com
Sub Test()
    Const stringValues As String = "bruce.wayne@batcave.com;#30;#clarke.kent@dailyplanet.com;#32;#the.joker@arkhamassylum.com;#33"
    Dim values As Variant
    values = Split(stringValues, ";#")

    Dim value As Variant
    For Each value In values
        If InStr(value, "@") Then
            ' You've got mail!
            Debug.Print value
        End If
    Next
End Sub

答案 1 :(得分:2)

  

“我需要翻转它,以便保留电子邮件地址和   数字和哈希标志被删除“

您可以定位要删除的内容,而不是定位有效部分:

#\d+;?#?

“一个标志,后跟一个或多个数字,然后是分号(可能),然后是一个英镑符号(可能)”

现在只需用空字符串替换you should have a clean list of email addresses

答案 2 :(得分:0)

根据您的真实输入字符串,您可以提出某事。像:

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

a demo on regex101.com。 “删除所有但是”归结为提取你想要的东西。