我正在编写Excel加载项以读取文本文件,提取值并将它们写入Excel文件。我需要用一个或多个空格分隔的一行并以数组的形式存储,我要从中提取所需的值。
我正在尝试实现类似这样的东西:
arrStr = Split(line, "/^\s*/")
但是编辑器在编译时抛出错误。
我该怎么办?
答案 0 :(得分:5)
如果您正在寻找正则表达式路由,则可以执行以下操作:
Dim line As String, arrStr, i As Long
line = "This is a test"
With New RegExp
.Pattern = "\S+"
.Global = True
If .test(line) Then
With .Execute(line)
ReDim arrStr(.Count - 1)
For i = 0 To .Count - 1
arrStr(i) = .Item(i)
Next
End With
End If
End With
重要提示:您将需要创建对以下内容的引用:
工具>参考中的Microsoft VBScript Regular Expressions 5.5
否则,您可以在下面看到后期绑定
您对原始模式\^S*\$
的原始实现存在一些问题:
S*
实际上与文字大写S匹配,而不与您要查找的空白字符匹配-因为它没有转义。
*
意味着匹配{strong>零或更多\S
。您可能正在寻找+
量词(一个或更多)。*?
),因为您想尽可能多地消费。我使用的模式:(\S+)
被放置在捕获组 (...)
中,该组将捕获\S+
的所有情况(不是白色的所有字符+
一次或多次。
我还使用了.Global
,因此您将在第一次比赛后继续比赛。
一旦您捕获了所有单词,就可以遍历match集合并将它们放入数组中。
Dim line As String, arrStr, i As Long
line = "This is a test"
With CreateObject("VBScript.RegExp")
.Pattern = "\S+"
.Global = True
If .test(line) Then
With .Execute(line)
ReDim arrStr(.Count - 1)
For i = 0 To .Count - 1
arrStr(i) = .Item(i)
Next
End With
End If
End With
我本来建议仅使用Split()
,但您指出在某些情况下可能会出现多个连续空格的问题。如果不是这种情况,则根本不需要正则表达式,例如:
arrStr = Split(line)
在每次出现空格时都会分裂