使用多个拆分字符时删除字符串的特定部分

时间:2017-03-28 00:20:58

标签: r

我已经阅读了一些Q& As关于删除和拆分字符串,但我没有遇到的是通过拆分w /特定字符来删除一个部分,当在字符串中多次使用该字符时。例如,

 V <- c("TUAA_2124_5733", "GAMS_1236_4767")
 V1 <- sapply(strsplit(V, split='_', fixed=TRUE), function(x) (x[2]))
 V1
 V1 [1] "2124" "1236"

此部分删除由下划线和最后一部分分隔的第一部分。

 sapply(strsplit(V, split='_', fixed=TRUE), function(x) (x[2]))

如何保留最后两个部分(2124_5733&amp; 1236_4767),以下划线分隔,同时仅删除第一部分(TUAA和GAMS)。

谢谢!

2 个答案:

答案 0 :(得分:4)

gsub将使用正确的正则表达式执行此操作。

gsub("^.*?_", "", V)
[1] "2124_5733" "1236_4767"

这个表达式可以这样理解:

初始^表示字符串的开头。
。表示任何字符,而。*表示任何字符的零个或多个实例。 但是,默认为“贪婪匹配”,因此。*将匹配最后一个_的所有字符。我们想要第一个,因此我们使用.*?来抑制贪婪匹配,并且只匹配第一个_。所以把它们放在一起,^.*?_从字符串的开头开始,匹配任意数量的字符,包括第一个_。这些都没有替换。

答案 1 :(得分:1)

希望以下代码有帮助 -

sub(pattern = "\\w{1,4}_", replacement = "", V)