首页 > 解决方案 > 将多个电子邮件地址从单行存储到列表/集合

问题描述

所以我下载了一个存储在我的临时文件夹中的 JSON 文件并按原样读取它(输出是一行字符串):

Dim strFileContent As String
Dim iFile As Integer: iFile = FreeFile
Open strFilePath For Input As #iFile
strFileContent = Input(LOF(iFile), iFile)
Close #iFile

该文件具有以下结构:

JSON结构

现在电子邮件是非常标准的格式:first.last@example.com. 有没有办法将电子邮件从字符串中提取到列表中,而不是使用完整的 JSON 解析库strFileContent

以下是关于电子邮件外观的 JSON 示例文本,以防万一:"work_email":{"display_name":"Work Email","data":"alpha.beta@example.com"},

我在看https://github.com/VBA-tools/VBA-JSON,但我希望有一个更简单的 RegEx 解决方案(而不是 JSON 解析器),因为如果 API 明天给我一个 XML 文件,我的代码就会过时。

标签: excelvba

解决方案


我建议使用 JSON 解析器路线,它会更可靠。但是,如果您想要一个正则表达式解决方案,也许这会起作用。

Public Function ExtractEmails(ByVal InputString, Optional pattern As String = "\"":""\w+@\w+\.\w+") As Object
    With CreateObject("vbscript.regexp")
        .Global = True
        .MultiLine = True
        .pattern = pattern
        Set ExtractEmails = .Execute(InputString)
    End With
End Function

Public Sub Example()
    Dim someString As String
    Dim emails     As Object
    Dim email      As Variant

    someString = "klasdkjasdkjha abc1@abc.com ""data"":""abc2@abc.com"" ""data"":""abc3@abc.com"" ""data"":""abc4@abc.com"" asdkjhaksjdhaksjhd"
    Set emails = ExtractEmails(someString)

    For Each email In emails
        Debug.Print Replace(Replace(email, """", vbNullString), ":", vbNullString)
    Next

End Sub

返回(abc1@abc.com 与模式不匹配,它应该在 ":" 之前):

abc2@abc.com
abc3@abc.com
abc4@abc.com

推荐阅读