Regex gsub R从字符串中提取数字

Regex gsub R从字符串中提取数字,regex,r,Regex,R,我有一个输入字符: ($3.24) 我想去 3.24 我试过: test您可以借助函数extract\u numeric从软件包tidyr进行测试 library(tidyr) test <- c("($3.24)") extract_numeric(test) [1] 3.24 所以,对于当前的示例,可以使用正则表达式 gsub("[^0-9.-]+", "", test) 您可以通过函数从软件包tidyr中提取数值来完成此操作 library(tidyr) test <- c

我有一个输入字符:
($3.24)
我想去
3.24
我试过:


test您可以借助函数
extract\u numeric
从软件包
tidyr
进行测试

library(tidyr)
test <- c("($3.24)")
extract_numeric(test)
[1] 3.24
所以,对于当前的示例,可以使用正则表达式

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

您可以通过函数
从软件包
tidyr
中提取数值来完成此操作

library(tidyr)
test <- c("($3.24)")
extract_numeric(test)
[1] 3.24
所以,对于当前的示例,可以使用正则表达式

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

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

以下是正确使用
gsub()
来获得您想要的:

> gsub("\\(\\$([0-9]+\\.+[0-9]+)\\)", "\\1", "($3.24)")
[1] "3.24"
此处使用的正则表达式是:

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

您可以在此处探索此正则表达式:

简单的一个

gsub("\\$", "", test)
如果您只关心数字,那么可以使用

gsub("\\$(\\d+(?:\\.\\d+)?)", "\\1", test)
如果还要删除
()
,请使用

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

gsub("\\$", "", test)
如果您只关心数字,那么可以使用

gsub("\\$(\\d+(?:\\.\\d+)?)", "\\1", test)
如果还要删除
()
,请使用

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

由于
模式中没有捕获组,所以它什么也不做。将代码稍微更改为
gsub(([0-9]+\\.?[0-9]+)\.,'\\1',test)
将提供所需的result@rawr:这正是我使用类似记事本++的方法。匹配您不需要的,匹配并捕获您需要保留的。由于
模式中没有捕获组,所以它什么也不做。将代码稍微更改为
gsub(([0-9]+\\.?[0-9]+)\.,'\\1',test)
将提供所需的result@rawr:这正是我使用类似记事本++的方法。匹配您不需要的,匹配并捕获您需要保留的。真管用!然而,有没有一种使用正则表达式的解决方案?这很有效!但是,有没有使用正则表达式的解决方案?