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
相关产品推荐
相关产品推荐

