gpt4 book ai didi

regex - 如何通过正则表达式分隔的拆分函数将VBA中的字符串拆分为数组

转载 作者:行者123 更新时间:2023-12-04 21:20:16 25 4
gpt4 key购买 nike

我正在编写一个 Excel 插件来读取文本文件、提取值并将它们写入 Excel 文件。我需要分割一行,由 分隔一个或多个空格 并将其以数组的形式存储,我想从中提取所需的值。

我正在尝试实现这样的事情:

arrStr = Split(line, "/^\s*/")

但是编辑器在编译时抛出错误。

我怎样才能做我想做的事?

最佳答案

如果您正在寻找正则表达式路线,那么您可以执行以下操作:

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

IMPORTANT: You will need to create a reference to:
Microsoft VBScript Regular Expressions 5.5 in Tools > References
Otherwise, you can see Late Binding below



您的原始模式的原始实现 \^S*\$有一些问题:
  • S*实际上匹配的是文字大写 S,而不是您正在寻找的空白字符 - 因为它没有被转义。
  • 即使它被转义了,你也会因为你的量词匹配你使用的每个字符串:*表示匹配或更多 \S .您可能正在寻找 +量词( 一个 或更多)。
  • 你很擅长让它变得贪婪(不使用 *? ),因为你想尽可能多地消费。

  • 我使用的模式: (\S+)被放置在一个捕获组中 (...)这将捕获 \S+ 的所有案例(所有不是空格的字符, + 一次或多次。

    我还使用了 .Global所以你将在第一场比赛后继续匹配。

    一旦你捕获了所有的单词,你就可以遍历匹配集合并将它们放入一个数组中。

    后期装订:
    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)

    每次出现空间都会 split

    关于regex - 如何通过正则表达式分隔的拆分函数将VBA中的字符串拆分为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53358309/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com