提取特定域扩展的电子邮件 ID

Extract email id of specific domain extensions

我需要从 .com .net .org 等特定域扩展的每一行中提取电子邮件 ID,其他所有内容都应忽略。下面是两行的示例数据。

    .@.3,.@.1601466914865855,.@.,.@.null,.@.,abc@xyz.com,abc@xyz.net,abc@xyz.org,null.val@.@.,.@@,abc@xyz.jpb,abc@xyz.xls,abc@xyz.321
.@.3,.@.1601466914865855,.@.,.@.null,.@.,123@hjk.com,123@hjk.net,123@hjk.org,null.val@.@.,.@@,abc@xyz.jpb,abc@xyz.xls,abc@xyz.321

即使有多个 ID,每行只有一个电子邮件 ID 就足够了,但第一个有效的扩展电子邮件匹配就足够了。以下是示例所需的结果。

我相信这可以通过使用正则表达式的自定义公式来完成,但我无法理解它。我正在使用 Desktop MS Excel 最新版本。

如果您的电子邮件地址比较简单,您可以使用这个正则表达式:

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b

在VBA中:

Option Explicit
Function extrEmail(S As String) As String
    Dim RE As Object, MC As Object
    Const sPat As String = "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b"
    
Set RE = CreateObject("vbscript.regexp")
With RE
    .Pattern = sPat
    .ignorecase = True
    .Global = False
    .MultiLine = True
    If .test(S) = True Then
        Set MC = .Execute(S)
        extrEmail = MC(0)
    End If
End With
End Function

匹配电子邮件地址可能会变得非常复杂,并且遵循所有规则的正则表达式非常复杂和冗长。但这个相对简单,可能会满足您的需要。

正则表达式的解释

邮箱地址1

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b

选项:不区分大小写; ^$ 匹配换行符

创建于 RegexBuddy

编辑: 要仅匹配特定域,只需将正则表达式中与域匹配的部分替换为一组 pipe-separated 个域名。

例如

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.(?:com|net|org)\b