我有一个字符串,如"3.1 ml"或"abc 3.1 xywazw"我想从这个字符串中提取"3.1"。我在stackoverflow上发现了许多关于从字符串中提取数字的问题,但是没有解决方案适用于十进制数字的情况。
"3.1 ml"
"abc 3.1 xywazw"
"3.1"
w8biq8rn1#
这种方法使小数点和小数部分可选,并允许提取多个数字:
str <- " test 3.1 test 5" as.numeric(unlist(regmatches(str, gregexpr("[[:digit:]]+\\.*[[:digit:]]*",str)) ) ) #[1] 3.1 5.0
字符串关于负数的问题可以通过可选的perl风格的look-ahead来解决:
str <- " test -4.5 3.1 test 5" as.numeric(unlist(regmatches(str,gregexpr("(?>-)*[[:digit:]]+\\.*[[:digit:]]*",str, perl=TRUE)))) #[1] -4.5 3.1 5.0
型
wmvff8tz2#
使用stringr库:
stringr
x<-"abc 3.1 xywazw" str_extract(x, "\\d+\\.*\\d*") [1] "3.1"
字符串
6qfn3psc3#
http://www.regular-expressions.info/floatingpoint.html中的浮点数正则表达式,在R中进行了微小的调整。
s <- "1e-6 dkel" regmatches(s,gregexpr("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?",s)) > [[1]] > [1] "1e-6"
mctunoxg4#
可以使用正则表达式:
> str <- " test 3.1 test" > as.numeric(regmatches(str,regexpr("[[:digit:]]+\\.[[:digit:]]+",str))) [1] 3.1
字符串regexpr返回匹配字符串的起始位置和长度。regmatches返回匹配项。然后,您可以将其转换为数字。
regexpr
regmatches
nhjlsmyf5#
readr::parse_number(c("abc 3.1 xywazw", "-3.1 ml", "1,234.56")) # [1] 3.10 -3.10 1234.56
5条答案
按热度按时间w8biq8rn1#
这种方法使小数点和小数部分可选,并允许提取多个数字:
字符串
关于负数的问题可以通过可选的perl风格的look-ahead来解决:
型
wmvff8tz2#
使用
stringr
库:字符串
6qfn3psc3#
http://www.regular-expressions.info/floatingpoint.html中的浮点数正则表达式,在R中进行了微小的调整。
字符串
mctunoxg4#
可以使用正则表达式:
字符串
regexpr
返回匹配字符串的起始位置和长度。regmatches
返回匹配项。然后,您可以将其转换为数字。nhjlsmyf5#
字符串