正则表达式从带小数的文本中提取小数
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+
匹配整数 51
( see the demo here)。您在 Excel 电子表格中看到 51.0
,因为小数部分默认为零。请改用此正则表达式模式:
-?\d+(?:\.\d+)?
我将另一种方法投入使用:
=1*REGEXEXTRACT(I3,"[\d.-]+")
[\d.-]+
显示为“一个或多个此类字符的任何不间断组合中的任何数字、句点或连字符。”
1*
是另一种将类似数字的字符串转换为真实数字的方法。
我认为最短的是
=REGEXEXTRACT(I2," .*")+0
意思是:
return everything after the space and turn it to a number
我有一个简单的 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+
匹配整数 51
( see the demo here)。您在 Excel 电子表格中看到 51.0
,因为小数部分默认为零。请改用此正则表达式模式:
-?\d+(?:\.\d+)?
我将另一种方法投入使用:
=1*REGEXEXTRACT(I3,"[\d.-]+")
[\d.-]+
显示为“一个或多个此类字符的任何不间断组合中的任何数字、句点或连字符。”
1*
是另一种将类似数字的字符串转换为真实数字的方法。
我认为最短的是
=REGEXEXTRACT(I2," .*")+0
意思是:
return everything after the space and turn it to a number