我有一个看起来像a
的字符串。
我想删除模式=== test
,包括===
的倒数第二次发生之前的所有内容。
a <- "=== test : {abc}
=== test : {abc}
=== test : {abc}
=== test : {aUs*}
=== dce
=== test : {12abc}
=== abc
=== test : {abc}
=== test : {dfg}"
result <- "test : {abc}
=== test : {dfg}"
我尝试过:
gsub(".*=== test", "", a)
如何将第二个索引设置为倒数第二个?
谢谢
答案 0 :(得分:0)
下面应该可以工作。我将数据分割成一个由换行符\\n
隔开的向量(附加的反斜杠用于“转义”特殊字符),然后使用grep
查找模式^=== test
的所有出现情况^
表示字符串应以此开头。
数据
a <- "=== test : {abc}
=== test : {abc}
=== test : {abc}
=== test : {aUs*}
=== dce
=== test : {12abc}
=== abc
=== test : {abc}
=== test : {dfg}"
代码
# convert to a vector for ease
b <- unlist(strsplit(a, '\\n'))
# get indices for each occurrence of the pattern
indices <- grep('^=== test', b)
# we only need the last two occurrences
n <- length(indices)
res <- b[indices[(n-1):n]]
# res is a vector with two entries, to get it back to a single entry
# same as the original data, we use paste(.., collapse = '\\n')
result <- paste(res, collapse = '\\n')
输出
> result
[1] "=== test : {abc}\\n=== test : {dfg}"
答案 1 :(得分:0)
我们可以使用strsplit
按换行符分割并选择最后两个元素。将它们paste
一起使用,并在开始时使用sub
删除===
:
sub("^=== ", "", paste(tail(strsplit(a, split = "\\n")[[1]], 2), collapse = "\n"))
# [1] "test : {abc}\n=== test : {dfg}"