使用R选择性地删除模式后面的字符

时间:2015-08-04 10:56:43

标签: regex r grep gsub

如何从模式后面的字符串中有选择地删除字符?

我希望删除7个数字和前面的冒号。

例如:

"((Northern_b:0.005926,Tropical_b:0.000000)N19:0.002950"

应该成为

"((Northern_b,Tropical_b)N19"

3 个答案:

答案 0 :(得分:2)

x <- "((Northern_b:0.005926,Tropical_b:0.000000)N19:0.002950"
gsub("[:]\\d{1}[.]\\d{6}", "", x)

gsub函数执行字符串替换并替换字符串中找到的所有匹配项(请参阅?gsub)。另一种方法是,如果您想要一个名称更友好的内容,则str_replace_all包中的内容为stringr

正则表达式使用\\d{n}搜索,查找数字。整数表示要查找的位数。因此\\d{1}会查找长度为1的一组数字。\\d{6}查找一组长度为6的数字。

答案 1 :(得分:1)

gsub('[:][0-9.]+','',x)
[1] "((Northern_b,Tropical_b)N19"

答案 2 :(得分:0)

解决此问题的另一种方法

library(stringr)
str1 <- c("((Northern_b:0.005926,Tropical_b:0.000000)N19:0.002950")

str_replace_all(str1, regex("(:\\d{1,}\\.\\d{1,})"), "")

#[1] "((Northern_b,Tropical_b)N19"