使用regex从R中的字符串中提取值

时间:2014-11-18 05:25:35

标签: regex r

我正在尝试提取此字符串的第一个和第二个数字,并将它们存储在单独的变量中。

(User20,10.25)

我无法弄清楚如何获取用户编号,然后知道他的价值。

到目前为止,我设法做到了这一点,但我不知道如何删除字符串的其余部分并仅获取数字。

gsub("\\(User", "", string)

4 个答案:

答案 0 :(得分:6)

尝试

str1 <- '(User20,10.25)'
scan(text=gsub('[^0-9.-]+', ' ', str1),quiet=TRUE) 
#[1] 20.00 10.25

如果字符串是

str2 <- '(User20-ht,-10.25)'
scan(text=gsub('-(?=[^0-9])|[^0-9.-]+', " ", str2, perl=TRUE), quiet=TRUE)
#[1]  20.00 -10.25

或者

library(stringr) 
str_extract_all(str1, '[0-9.-]+')[[1]]
#[1] "20"    "10.25"

或使用stringi

library(stringi)
stri_extract_all_regex(str1, '[0-9.-]+')[[1]]
#[1] "20"    "10.25"

答案 1 :(得分:5)

Tyler Rinker&#39; "qdapRegex" package有一些对这类内容有用的功能。

在这种情况下,您很可能对rm_number

感兴趣
library(qdapRegex)
rm_number(x, extract = TRUE)
# [[1]]
# [1] "20"    "10.25"

答案 2 :(得分:4)

您可以将strsplitsub ...

一起使用
> sub('\\(User|\\)', '', strsplit(x, ',')[[1]])
[1] "20"    "10.25"

可能更容易匹配您想要的上下文。

> regmatches(x, gregexpr('[0-9.]+', x))[[1]]
[1] "20"    "10.25"

答案 3 :(得分:0)

以下是一种方法:

[^,\)\([A-Z]]