excel - 将多个电子邮件地址从单行存储到列表/集合
问题描述
所以我下载了一个存储在我的临时文件夹中的 JSON 文件并按原样读取它(输出是一行字符串):
Dim strFileContent As String
Dim iFile As Integer: iFile = FreeFile
Open strFilePath For Input As #iFile
strFileContent = Input(LOF(iFile), iFile)
Close #iFile
该文件具有以下结构:
现在电子邮件是非常标准的格式: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 文件,我的代码就会过时。
解决方案
我建议使用 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
推荐阅读
- vba - Access VBA 运行时错误 31519:您无法导入此文件
- java - 为 JDBC 驱动程序设置 CLASSPATH 后无法找到或加载主类
- php - PHP 标准 DOMElement::setIdAttribute 错误
- excel - 用于填充的 Excel Office 脚本
- screenshot - 如何在带有状态栏和底部指示器的可编程 iPhone X 系列上截屏?
- android - Android TV - 以编程方式切换到 HDMI 输入
- c# - CsvHelper 流太长
- javascript - React - Material UI图标的propType应该是什么
- reactjs - 属性 'setUserName' 不存在 - 用测试库开玩笑测试
- c++ - 静态存储的字符串集