Regex 如何在VB脚本中使用正则表达式处理浮点数
我试图在下面的字符串中使用子匹配来获取数字,但我不确定如何处理我的字符串是否包含整数(无小数)或浮点数 请纠正我在下面代码中的错误Regex 如何在VB脚本中使用正则表达式处理浮点数,regex,vbscript,Regex,Vbscript,我试图在下面的字符串中使用子匹配来获取数字,但我不确定如何处理我的字符串是否包含整数(无小数)或浮点数 请纠正我在下面代码中的错误 str="Added Quantity:12.23 Pass" Set oReg=New RegExp oReg.pattern="(.*Quantity.*)+((\d{1,})|(\d{1,}\.\d{1,}))(.*)" set r=oReg.execute(str) for i=0 to r.count-1 print r.item(1).subm
str="Added Quantity:12.23 Pass"
Set oReg=New RegExp
oReg.pattern="(.*Quantity.*)+((\d{1,})|(\d{1,}\.\d{1,}))(.*)"
set r=oReg.execute(str)
for i=0 to r.count-1
print r.item(1).submatches(i)
next
您的表达式可以匹配数字,但不会匹配错误的位置。为了了解原因,让我们考虑下面的字符串中的<代码>(数量*)(\d { 1,})< /> >匹配:
Quantity:12.23
- 整个匹配:
数量:12
- 第1组:
数量:1
- 第2组:
2
- 第1组:
*
是贪婪的,并且尽可能多地匹配,包括数字。然后,它回溯,以便能够匹配第二个组中的至少一个数字(\d{1,}
)。但是你想把所有的数字都放进去
有几种方法可以解决这个问题,但最简单的方法是使表达式更加具体:只需匹配非数字,而不是所有(
):
(.*Quantity\D*)+(\d{1,})
此外,这里不需要+
量词,而且\d{1,}
可以缩短为\d+
。在表达式的其余部分,您可以将匹配的整数和小数连接在一起,只需将小数部分设置为可选:
.*Quantity\D*(\d+(?:\.\d+)?).*
((?:…)
只表示此组不会被捕获;)
最后,请注意,这将匹配1
和0.23
,但不匹配1.
,也不匹配.23
。虽然这是完全正确的,但在小数点前省略前导零(特别是在美式拼写中)有点常见。您需要oReg.pattern=“(.*\bQuantity:)(\d+(?:\.\d+))(.*)”
并获得第一个子匹配。像Set-rMatch=oReg.Execute(str)
然后print r(0)。子匹配(1)