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
-问题在于,
*
是贪婪的,并且尽可能多地匹配,包括数字。然后,它回溯,以便能够匹配第二个组中的至少一个数字(
\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)