R语言 从字符串中提取十进制数字

xpcnnkqh  于 2023-07-31  发布在  其他
关注(0)|答案(5)|浏览(120)

我有一个字符串,如"3.1 ml""abc 3.1 xywazw"
我想从这个字符串中提取"3.1"。我在stackoverflow上发现了许多关于从字符串中提取数字的问题,但是没有解决方案适用于十进制数字的情况。

w8biq8rn

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

wmvff8tz

wmvff8tz2#

使用stringr库:

x<-"abc 3.1 xywazw"
str_extract(x, "\\d+\\.*\\d*")
[1] "3.1"

字符串

6qfn3psc

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"

字符串

mctunoxg

mctunoxg4#

可以使用正则表达式:

> str <- " test 3.1 test"
> as.numeric(regmatches(str,regexpr("[[:digit:]]+\\.[[:digit:]]+",str)))
[1] 3.1

字符串
regexpr返回匹配字符串的起始位置和长度。regmatches返回匹配项。然后,您可以将其转换为数字。

nhjlsmyf

nhjlsmyf5#

readr::parse_number(c("abc 3.1 xywazw", "-3.1 ml", "1,234.56"))
# [1]    3.10   -3.10 1234.56

字符串

相关问题