提取特定域扩展的电子邮件 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
选项:不区分大小写; ^$ 匹配换行符
- Assert position at a word boundary
\b
- Match a single character present in the list below
[A-Z0-9._%+-]+
- Match the character “@” literally
@
- Match a single character present in the list below
[A-Z0-9.-]+
- Match the character “.” literally
\.
- Match a single character in the range between “A” and “Z”
[A-Z]{2,}
- Assert position at a word boundary
\b
创建于 RegexBuddy
编辑: 要仅匹配特定域,只需将正则表达式中与域匹配的部分替换为一组 pipe-separated 个域名。
例如
\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.(?:com|net|org)\b
我需要从 .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
选项:不区分大小写; ^$ 匹配换行符
- Assert position at a word boundary
\b
- Match a single character present in the list below
[A-Z0-9._%+-]+
- Match the character “@” literally
@
- Match a single character present in the list below
[A-Z0-9.-]+
- Match the character “.” literally
\.
- Match a single character in the range between “A” and “Z”
[A-Z]{2,}
- Assert position at a word boundary
\b
创建于 RegexBuddy
编辑: 要仅匹配特定域,只需将正则表达式中与域匹配的部分替换为一组 pipe-separated 个域名。
例如
\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.(?:com|net|org)\b