从 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.
我一直在尝试从 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.