excel - RegExp 对象 - 运行时错误 '5017' - 没有明显的模式问题

标签 excel regex vba vbscript

我正在使用 RegExp 对象来解析一个常见的文本字段并将其转换为一个数字。我有模式:(^[^0-9+-]+)|((?<=[+-])[^0-9]+)|((?<=[0-9])[^0-9.]+)这应该会变成 "37,080 lbs" 这样的输入进入 37080 .
出于某种原因,当我尝试执行此操作时,我收到运行时错误“5017”。我看到另一个帖子,其中问题是由模式错误引起的,但我没有看到我的模式有任何问题,并在 https://regex101.com/ 之类的网站上对其进行了测试表明该模式是有效的。
以下是说明此错误的示例脚本:

Function Example()
    Dim Regex As Object
    Set Regex = CreateObject("VBScript.RegExp")
    With Regex
        .Global = True
        .MultiLine = False
        .Pattern = "(^[^0-9+-]+)|((?<=[+-])[^0-9]+)|((?<=[0-9])[^0-9.]+)"
    End With
    
    Debug.Print Regex.Replace("37,080 lbs", "")
End Function
注意:我标记了 VBScript,因为我使用的是 VBScript.RegExp 对象。代码本身是在 Excel 2007 中运行的 VBA 6.5.1020。

最佳答案

您可以替换此模式的所有出现:

^[^0-9+-]+|([+-])[^0-9]+|([0-9])[^0-9.]+

$1$2
regex demo .
除了 VBA 正则表达式引擎不支持的lookbehinds ((?<=...)),您可以使用捕获组,并通过对捕获值的反向引用来恢复结果中捕获的文本。

关于excel - RegExp 对象 - 运行时错误 '5017' - 没有明显的模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70962430/

相关文章:

Java,正则表达式捕获模式的多次出现

c++ - 正则表达式新手的东西

sql - 如何将 Excel 单元格值设置为 Access Query 的条件?

excel - 需要 BeforeClose 才能处理多个条件

excel - 使用 MatLab Polyarea 与 Excel SumProduct 进行多边形面积计算的差异

excel - 如何在截屏后清除剪贴板(Application.cutcopymode = False 不起作用)?

php - 最多匹配 x 正则表达式或 y 正则表达式

excel - VBA Excel 中的 VBA DateValue() 错误?

excel - 类型错误 : 'generator' object is not subscriptable

json - 如何为每个字段选择 Excel 表中给出的 JSON 节点?