A>A", "*>B>B", "A>A>A>A>A>*>A>A>A>*>*>-6ren">
gpt4 book ai didi

删除连续字符运行中的重复项

转载 作者:行者123 更新时间:2023-12-03 19:40:02 24 4
gpt4 key购买 nike

我有包含大量重复项的字符串,如下所示:

tst <- c("C>C>C>B>B>B>B>C>C>*>*>*>*>*>C", "A>A>A", "*>B>B", 
"A>A>A>A>A>*>A>A>A>*>*>*>*>A>A", "*>C>C", "A")
我想删除所有 连续重复的大写字母和“*”字符,所以预期的结果是这样的:
[1] "CBC*C" "A"     "*B"    "A*A*A" "*C"    "A"
我已经成功提取了重复的大写字母:
library(stringr)
unlist(str_extract_all(gsub(">", "", tst), "(.)(?=\\1)"))
[1] "C" "C" "B" "B" "B" "C" "*" "*" "*" "*"
但我有点卡在这里。我的预感是函数 which ,它返回索引,可能会有所帮助,但在这种情况下不知道如何实现它。
有任何想法吗?
编辑 :
我自己离解决方案并不远 - 只需使用负前瞻(而不是正前瞻)就可以解决问题:
str_extract_all(gsub(">", "", tst), "(.)(?!\\1)")
[[1]]
[1] "C" "B" "C" "*" "C"

[[2]]
[1] "A"

[[3]]
[1] "*" "B"

[[4]]
[1] "A" "*" "A" "*" "A"

[[5]]
[1] "*" "C"

[[6]]
[1] "A"

最佳答案

另一种获取方式CBC*C可以使用 2 个组并在替换中使用第 2 组。

((.)>)\1+
Regex demo
例子
tst <- "C>C>C>B>B>B>B>C>C>*>*>*>*>*>C"
gsub("((.)>)\\1+", "\\2", tst)
输出
[1] "CBC*C"

关于删除连续字符运行中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66355324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com