正则表达式从带小数的文本中提取小数

Regexextract decimal number from text with decimals

我有一个简单的 google 工作表 REGEXEXTRACT 函数,可以从 NFL 行数和下盘数中提取号码。

问题来了: 函数

=VALUE(REGEXEXTRACT(I3,"-*\d*.?\d+"))

从文本中正确提取 -13.5 Line: GB -13.5 但是当我在文本 O/U: 51.5 上使用相同的函数时,它错误地提取了 51.0

我的正则表达式哪里出错了?

怎么样:

=--REGEXEXTRACT(I3,"-?\d+(?:\.\d+)?")

该模式表示:

  • -? - 可选连字符。
  • \d+ - 1+ 位数。
  • (?: - 打开非捕获组。
    • \.\d+ - 一个字面点和 1+ 个数字。
    • )? - 关闭非捕获组并使其可选。

而不是 VALUE() 我使用双重否定来利用 GS​​ 的能力通过直接计算将看起来像数字的字符串变成数字。第一个连字符创建一个负数,我们用第二个连字符与之相反。通过 1*.

可以达到相同的结果

您当前的正则表达式的问题是,如所写,在第二种情况下,模式的前导部分不匹配任何内容,只有最后的 \d+ 匹配整数 51see the demo here)。您在 Excel 电子表格中看到 51.0,因为小数部分默认为零。请改用此正则表达式模式:

-?\d+(?:\.\d+)?

Demo

我将另一种方法投入使用:

=1*REGEXEXTRACT(I3,"[\d.-]+")

[\d.-]+ 显示为“一个或多个此类字符的任何不间断组合中的任何数字、句点或连字符。”

1* 是另一种将类似数字的字符串转换为真实数字的方法。

我认为最短的是

=REGEXEXTRACT(I2," .*")+0

意思是:
return everything after the space and turn it to a number