gpt4 book ai didi

excel - 我只想通过文本使用正则表达式获取数值

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

我想从两行表达式中获取数值。
感谢那些现在将提供帮助的人。

Sub Test_nLine()
Dim oRegexp, iStr, colMatch, objMatch
Set oRegexp = New regexp
With oRegexp
.pattern = "\s*([^\r\n]+?)\s*$"
.Global = True
.MultiLine = True
End With
iStr = "(1234.00.01.01, 5678.03 " & vbLf & " and 1234.00.02 excluding)"
Set colMatch = oRegexp.Execute(iStr)
For Each objMatch In colMatch
Debug.Print objMatch.SubMatches.item(0)
Next
End Sub
输出是 (1234.00.01.01, 5678.03 and 1234.00.02 excluding)预期产出 1234.00.01.01 5678.03 1234.00.02

最佳答案

您不需要捕获组,因此也不需要循环 Submatches在这里,看看以下模式是否适合您:

(?=(?:.*\n?)*\bexcluding\)$)\d+(?:\.\d+)*
正前瞻内的嵌套非捕获组看起来有点奇怪,但问题是 VBScript 确实 not have an option to make the dot match line break characters与非常相似的 JavaScript 对应物不同。
所以,这里有一个在线 demo下面是模式的分割:
  • (?= - 积极的前瞻:
    * (?: - 非捕获组:
    * .*\n? - 0+ 次任何字符,但换行符后跟可选的换行符。
    * )* - 关闭非捕获组并匹配 0 次以上:
  • \b - 字边界。
  • excluding - 字面上匹配“排除”。
  • \) - 文字结束括号。
  • $ - 结束字符串 anchor 。
  • ) - 关闭积极的lookaehad。

  • \d+ - 1+ 位数。
  • (?: - 打开非捕获组:
  • \.\d+ - 一个文字点,后跟 1 个以上的数字。
  • )* - 关闭非捕获组并匹配 0+ 次。


  • 注: MultiLine下面的代码中省略了正则表达式对象的属性。这是故意的,因为我们不需要它,因此它被设置为 FALSE默认。这很重要,因为如果我们将其设置为 TRUE开始和结束字符串 anchor 也将匹配换行符之后或之前的位置。
    Sub Test_nLine()

    Dim oRegexp, iStr As String, colMatch, objMatch

    iStr = "(1234.00.01.01, 5678.03 " & vbLf & " and 1234.00.02 excluding)"

    Set oRegexp = New regexp
    With oRegexp
    .Pattern = "\d+(?:\.\d+)*(?=(?:.*\n*)*\bexcluding\)$)"
    .Global = True
    If .Test(iStr) = True Then
    Set colMatch = .Execute(iStr)
    For Each objMatch In colMatch
    Debug.Print objMatch
    Next
    End If
    End With

    End Sub
    需要注意的是,我还包括了 Test方法来捕获在设置 MatchCollection2 之前找不到匹配项的情况对象以防止错误消息。上面现在将打印:
    1234.00.01.01
    5678.03
    1234.00.02

    编辑:由于回溯, Test如果您的字符串执行 ,则方法可能需要很长时间不是 以“排除)”结尾。因此我建议使用 Like在这种情况下运营商:
    Sub Test_nLine()

    Dim oRegexp, iStr As String, colMatch, objMatch

    iStr = "(1234.00.01.01, 5678.03" & vbLf & "and 1234.00.02 excluding)"

    If iStr Like "*excluding)" Then
    Set oRegexp = New regexp
    With oRegexp
    .Pattern = "\d+(?:\.\d+)*"
    .Global = True
    If .Test(iStr) = True Then
    Set colMatch = .Execute(iStr)
    For Each objMatch In colMatch
    Debug.Print objMatch
    Next
    End If
    End With
    End If

    End Sub

    关于excel - 我只想通过文本使用正则表达式获取数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65913876/

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