RegExp 对象 - 运行-time error '5017' - 没有明显的模式问题
RegExp Object - Run-time error '5017' - No apparent pattern issues
我正在使用 RegExp 对象解析普通文本字段并将其转换为数字。我有模式:(^[^0-9+-]+)|((?<=[+-])[^0-9]+)|((?<=[0-9])[^0-9.]+)
应该将 "37,080 lbs"
之类的输入转换为 37080
.
出于某种原因,当我尝试执行此操作时,出现 运行 时错误“5017”。我看到另一个 post 问题是由模式错误引起的,但我没有看到我的模式有任何问题并且在像 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 对象。代码本身是 VBA 6.5.1020 运行 in Excel 2007.
您可以替换所有出现的这种模式:
^[^0-9+-]+|([+-])[^0-9]+|([0-9])[^0-9.]+
和
参见regex demo。
代替 VBA 正则表达式引擎不支持的后视 ((?<=...)
),您可以使用捕获组,并使用对捕获值的反向引用在结果中恢复捕获的文本。
我正在使用 RegExp 对象解析普通文本字段并将其转换为数字。我有模式:(^[^0-9+-]+)|((?<=[+-])[^0-9]+)|((?<=[0-9])[^0-9.]+)
应该将 "37,080 lbs"
之类的输入转换为 37080
.
出于某种原因,当我尝试执行此操作时,出现 运行 时错误“5017”。我看到另一个 post 问题是由模式错误引起的,但我没有看到我的模式有任何问题并且在像 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 对象。代码本身是 VBA 6.5.1020 运行 in Excel 2007.
您可以替换所有出现的这种模式:
^[^0-9+-]+|([+-])[^0-9]+|([0-9])[^0-9.]+
和
参见regex demo。
代替 VBA 正则表达式引擎不支持的后视 ((?<=...)
),您可以使用捕获组,并使用对捕获值的反向引用在结果中恢复捕获的文本。