我已经阅读了一些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)。
谢谢!
答案 0 :(得分:4)
gsub
将使用正确的正则表达式执行此操作。
gsub("^.*?_", "", V)
[1] "2124_5733" "1236_4767"
这个表达式可以这样理解:
初始^表示字符串的开头。
。表示任何字符,而。*表示任何字符的零个或多个实例。
但是,默认为“贪婪匹配”,因此。*将匹配最后一个_的所有字符。我们想要第一个,因此我们使用.*?
来抑制贪婪匹配,并且只匹配第一个_
。所以把它们放在一起,^.*?_
从字符串的开头开始,匹配任意数量的字符,包括第一个_。这些都没有替换。
答案 1 :(得分:1)
希望以下代码有帮助 -
sub(pattern = "\\w{1,4}_", replacement = "", V)