gsub R从字符串中提取数字

时间:2016-04-21 13:52:50

标签: regex r

我有这个输入字符:     ($3.24) 我想得到     3.24 我试过了:

test <- c("($3.24)")
aa <- gsub("[0-9]+\\.?[0-9]+", '\\1', test)

替代\\1是什么?

4 个答案:

答案 0 :(得分:2)

表达式\\1表示正则表达式中第一个捕获组中的任何内容。捕获组由闭包(括号)定义,但由于您没有定义任何有意义的内容,因此您无法获得所需的结果。

正确使用gsub()来获得您想要的内容:

> gsub("\\(\\$([0-9]+\\.+[0-9]+)\\)", "\\1", "($3.24)")
[1] "3.24"

这里使用的正则表达式是:

\(\$([0-9]+\.+[0-9]+)\)

捕获组([0-9]+\.+[0-9]+),它是介于($和右括号)之间的任何内容,这是一个可能包含单个小数的数字点。然后,使用gsub()test替换为捕获的内容,在本例中为3.24

您可以在此处浏览此正则表达式:

Regex101

答案 1 :(得分:1)

您可以在程序包extract_numeric中使用函数tidyr帮助完成此工作。

library(tidyr)
test <- c("($3.24)")
extract_numeric(test)
[1] 3.24

查看extract_numeric的代码告诉我们,它是gsub的简单包装器。

function (x) 
{
    as.numeric(gsub("[^0-9.-]+", "", as.character(x)))
}

因此,对于当前示例,您可以使用正则表达式

gsub("[^0-9.-]+", "", test)

答案 2 :(得分:0)

library(stringr)
str_extract(test, '\\d.\\d+')
#[1] "3.24"

答案 3 :(得分:0)

简单的

gsub("\\$", "", test)

如果您只关心数字,那么您可以使用

gsub("\\$(\\d+(?:\\.\\d+)?)", "\\1", test)

如果您还想删除(),请使用

gsub("\\(\\$(\\d+(?:\\.\\d+)?)\\)", "\\1", test)