我有" elephant_giraffe_lion
"和" monkey_tiger
"字符串。
这里的条件是如果有两个或更多分隔符,我想在第二个分隔符处拆分,如果只有一个分隔符,我想在该分隔符处拆分。因此,我希望在此示例中得到的结果是" elephant_giraffe
"和" monkey
"。
mystring<-c("elephant_giraffe_lion", "monkey_tiger")
结果
"elephant_giraffe" "monkey"
答案 0 :(得分:2)
您可以使用$
,
unlist(strsplit(mystring, "_[a-z]+$"))
# [1] "elephant_giraffe" "monkey"
上述内容仅匹配最后一个&#34; _&#34;,不考虑超过两个&#34; _&#34;的情况。对于更一般的情况,您可以尝试
mystring<-c("elephant_giraffe_lion", "monkey_tiger", "dogs", "foo_bar_baz_bap")
tmp <- gsub("([^_]+_[^_]+).*", "\\1", mystring)
tmp[tmp==mystring] <- sapply(strsplit(tmp[tmp==mystring], "_"), `[[`, 1)
tmp
# [1] "elephant_giraffe" "monkey" "dogs" "foo_bar"
您还可以使用gsubfn
来处理与功能的匹配
library(gsubfn)
f <- function(x,y) if (y==x) strsplit(y, "_")[[1]][[1]] else y
gsubfn("([^_]+_[^_]+).*", f, mystring, backref=1)
# [1] "elephant_giraffe" "monkey" "dogs" "foo_bar"
答案 1 :(得分:1)
当我在您的其他相关question上发布答案时,基本R解决方案:
x <- c('elephant_giraffe_lion', 'monkey_tiger', 'foo_bar_baz_bap')
sub('^(?|([^_]*_[^_]*)_.*|([^_]*)_[^_]*)$', '\\1', x, perl=TRUE)
# [1] "elephant_giraffe" "monkey" "foo_bar"