我有这个输入字符:
($3.24)
我想得到
3.24
我试过了:
test <- c("($3.24)")
aa <- gsub("[0-9]+\\.?[0-9]+", '\\1', test)
替代\\1
是什么?
答案 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
。
您可以在此处浏览此正则表达式:
答案 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)