我正在使用 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/