Regex R-用正则表达式从字符串中提取数字

Regex R-用正则表达式从字符串中提取数字,regex,r,stringr,Regex,R,Stringr,如果可能的话,我想从只有一个表达式的字符串中提取一个带小数的数字 例如,将“2123.02”转换为“2123.02”-我当前的解决方案是: paste(unlist(str_extract_all("2,123.02","\\(?[0-9.]+\\)?",simplify=F)),collapse="") 但我要寻找的是str_extract_中的表达式,它只是将它自身作为一个向量绑定在一起。这可以通过正则表达式实现吗?您可以尝试用空字符串替换逗号: gsub(",", "", "2,123.

如果可能的话,我想从只有一个表达式的字符串中提取一个带小数的数字

例如,将“2123.02”转换为“2123.02”-我当前的解决方案是:

paste(unlist(str_extract_all("2,123.02","\\(?[0-9.]+\\)?",simplify=F)),collapse="")

但我要寻找的是str_extract_中的表达式,它只是将它自身作为一个向量绑定在一起。这可以通过正则表达式实现吗?

您可以尝试用空字符串替换逗号:

gsub(",", "", "2,123.02")
#[1] "2123.02"
注意:如果只需要替换数字之间的逗号,可以使用lookarounds:

gsub("(?<=[0-9]),(?=[0-9])", "", "this, this is my number 2,123.02", perl=TRUE)
#[1] "this, this is my number 2123.02"

另一个选项是
tidyr包中的
extract\u numeric

library(tidyr)
extract_numeric("2,123.02")

[1] 2123.02

谢谢,这有助于我理解正则表达式。是的,你的第二行更符合我的要求,因为字符串比删除“,”更复杂,就像在我的示例中一样。但这确实帮助了我,谢谢你的额外解释@CathG在正则表达式中不需要转义逗号,即使
fixed=FALSE
@MatthewPlourde确实:-)我到处都能看到特殊字符(我想转义非特殊字符比不转义“真”字符更好…;-)。编辑,谢谢!我不确定它如何处理多个数字。该函数禁止任何不是数字、点或连字符(减号)的内容(
as.numeric(gsub([^0-9.-]+”,“,as.character(x))
)@CathG它识别负号,如果这是您的意思?@Roman,我的意思是,如果字符串是,例如“2123.02 2565”,它将以“怪异”结尾像所有的空格、文本等都是suppressed@CathG像这样的字符串必须首先使用
strsplit
scan
进行拆分。是的,很有可能,我想最终的目标是只获取数字,然后逐个计算,这样最终就不会有问题了
library(tidyr)
extract_numeric("2,123.02")

[1] 2123.02