我一直在尝试从sparklyr中的字符串中提取十进制数字,但是它不适用于通常在Spark之外使用的常规语法。
我尝试使用regexp_extract,但它返回空字符串。
regexp_extract($170.5M, "[[:digit:]]+\\.*[[:digit:]]*")
我试图得到170.5。
答案 0 :(得分:2)
您可以从基数R使用regexpr
v <- "$170.5M"
regmatches(v, regexpr("\\d*\\.\\d", v))
# [1] "170.5"
答案 1 :(得分:0)
您可以使用
regexp_extract(col_value, "[0-9]+(?:[.][0-9]+)?")
或
regexp_extract(col_value, "\\p{Digit}+(?:\\.\\p{Digit}+)?")
您的[[:digit:]]+\.*[[:digit:]]*
正则表达式不起作用,因为regexp_extract
需要Java兼容的正则表达式模式,并且该引擎不支持[:classname:]
语法中的POSIX字符类。您可以使用digit
之类的\p{Digit}
POSIX字符类,请参见Java regex documentation。
请参见regexp_extract
documentation:
从指定的字符串列中提取由Java正则表达式标识的特定(idx)组。