有条件地替换为str_replace

时间:2019-06-09 18:05:50

标签: r regex

我有这种数据:

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"

2 个答案:

答案 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)

Demo

相关问题