我有这种数据:
d = as.character(c("1,23", "1,23.23", "1.23", "-1.2", "1,23.234"))
如果字符串中带有标点符号和逗号,我想删除标点符号后面的字符以及标点符号本身。
结果应如下所示:
d = as.character(c("1,23", "1,23", "1.23", "-1.2", "1,23"))
问题是我不能使用str_replace,因为它还会删除其他字符串。
library(stringr)
str_replace(d,"\\.[0-9]+", "")
[1] "1,23" "1,23" "1" "-1" "1,23"
答案 0 :(得分:4)
我们可以匹配一个或多个数字的模式,后跟一个逗号或点和一个或多个数字,将其捕获为一个组((...)
),并在替换中使用后向引用(\\1
)
sub("^(-?\\d+[,.]\\d+).*", "\\1", d)
#[1] "1,23" "1,23" "1.23" "-1.2" "1,23"
或在str_replace
library(stringr)
str_replace(d, "^(-?\\d+[,.]\\d+).*", "\\1")
#[1] "1,23" "1,23" "1.23" "-1.2" "1,23"
答案 1 :(得分:1)
由于我们的数据似乎有效,因此,如果可以使用环顾方法,此表达式可能会起作用:
(?<=,)(.+)(\..+)
在这里,我们只捕获那些我猜不希望的数字。
我们的代码可能类似于:
str_replace(d, "(?<=,)(.+)(\..+)", "\\1")
或
sub("(?<=,)(.+)(\..+)", "\\1", d)