从 Sparklyr 中的字符串中提取小数

Extract decimal numbers from string in Sparklyr

我一直在尝试从 sparklyr 中的字符串中提取十进制数字,但它不适用于通常在 Spark 之外使用的常规语法。

我试过使用 regexp_extract 但它 returns 是空字符串。

regexp_extract(0.5M, "[[:digit:]]+\.*[[:digit:]]*")

我正在努力获得 170.5 作为结果。

您可以使用基础 R

中的 regexpr
v <- "0.5M"
regmatches(v, regexpr("\d*\.\d", v))
# [1] "170.5"

您可以使用

regexp_extract(col_value, "[0-9]+(?:[.][0-9]+)?")

regexp_extract(col_value, "\p{Digit}+(?:\.\p{Digit}+)?")

您的 [[:digit:]]+\.*[[:digit:]]* 正则表达式不起作用,因为 regexp_extract 需要一个 Java 兼容的正则表达式模式,并且该引擎不支持 POSIX 字符 classes在 [:classname:] 语法中。您可以使用 digit POSIX 字符 class 如 \p{Digit},请参阅 Java regex documentation

参见regexp_extract documentation

Extract a specific(idx) group identified by a java regex, from the specified string column.