You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GNU R技术问询:如何去除字符串中每个单词首尾的重复字符

嗨埃里克!很高兴能帮你解决这个R字符串处理的问题😉。针对“去除字符串内每个单词首尾的重复字符”这个需求,我分两种最常见的场景给你具体的实现方案:

场景1:完全去除单词首尾的连续重复字符

比如把 aaabbbhello aaacccworldddd 处理成 bbbhello cccworld test,也就是把单词开头/结尾连续重复的字符全部删掉。

你可以先写一个处理单个单词的函数,再批量应用到整个字符串:

# 定义处理单个单词的函数:去除首尾连续重复字符
trim_repeats <- function(word) {
  # 去掉开头连续重复的字符(比如"aaa..."变成"")
  word <- sub("^(.)\\1+", "", word)
  # 去掉结尾连续重复的字符(比如"...ddd"变成"")
  sub("(.)\\1+$", "", word)
}

# 测试示例
input_str <- "aaabbbhello aaacccworldddd xxxtestyyy"
# 拆分字符串为单词列表
words <- strsplit(input_str, "\\s+")[[1]]
# 对每个单词应用处理函数
processed_words <- sapply(words, trim_repeats)
# 合并回字符串
result <- paste(processed_words, collapse = " ")

# 查看结果
result
# 输出:"bbbhello cccworld test"
场景2:将首尾连续重复字符压缩为单个

如果你不想完全删掉,而是把连续重复的字符只保留一个(比如把 aaabbbhelloaaa 变成 abbbhelloa),只要稍微修改处理函数即可:

# 定义处理单个单词的函数:压缩首尾连续重复字符为单个
compress_repeats <- function(word) {
  # 开头连续重复保留一个(比如"aaa..."变成"a...")
  word <- sub("^(.)\\1+", "\\1", word)
  # 结尾连续重复保留一个(比如"...ddd"变成"...d")
  sub("(.)\\1+$", "\\1", word)
}

# 同样的测试流程
processed_words <- sapply(words, compress_repeats)
result <- paste(processed_words, collapse = " ")

# 查看结果
result
# 输出:"abbbhelloa cccworldd xtesty"

正则表达式简单解释

  • ^(.)\\1+:匹配字符串开头的任意字符((.)捕获这个字符),然后匹配该字符重复1次以上的部分,替换的时候要么为空(场景1),要么保留捕获的单个字符(场景2)。
  • (.)\\1+$:原理和上面类似,只是针对字符串结尾的连续重复字符。

如果你的“重复字符”指的是其他情况(比如非连续的重复),可以再补充细节,我再帮你调整方案~

内容的提问来源于stack exchange,提问作者user3771059

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:54:46