我正在使用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对象。代码本身就是在Excel2007中运行的VBA 6.5.1020。
您可以替换此模式的所有出现:
^[^0-9+-]+|([+-])[^0-9]+|([0-9])[^0-9.]+
带有
$1$2
请参阅regex演示。
与VBA正则表达式引擎不支持的lookbehinds((?<=...)
(不同,您可以使用捕获组,并通过对捕获值的反向引用来恢复结果中捕获的文本。