查找并替换字符串中的重复字符

查找并替换字符串中的重复字符

我希望删除/替换字符串内的“重复字符”,例如>

输入,

staaacksoveerfloow

期望的输出,

stacksoverflow

在这种情况下a重复 3 次,eis 2 & ois 2。我们不是完全删除它们,而是删除重复/重复的条目。

但是,如果该字符前后没有重复,我们就不会进行重复数据删除。

答案1

$ tr -s '[:lower:]' <<<"staaacksoveerfloow"
stacksoverflow

tr此处使用该实用程序及其-s选项来删除给定字符串中任何小写字符的连续重复项。

[:lower:]您可以使用a-z或 与您想要影响的字符匹配的任何范围或字符类来代替。

答案2

你可以使用 sed 来实现

echo staaacksoveerfloow | sed 's/\([a-zA-Z]\)\1\+/\1/g'

我认为问题是一个重复而非重复的状态。你可以参考更多这里

答案3

ksh93

$ var=staaacksoveerfloow
$ print -r -- "${var//@(?)+(\1)/\1}"
stacksoverflow

(如果您想将重复数据删除仅限于某些类别的字符,请替换?[[:alpha:]]/ ...)。[[:lower:]]

zsh

$ autoload -Uz regexp-replace
$ set -o rematchpcre
$ var=staaacksoveerfloow
$ regexp-replace var '(.)\1+' '$match[1]'
$ print -r -- $var
stacksoverflow

再次,替换.[[:alpha:]]/ [[:lower:]](POSIX 字符类),或 PCRE 属性(例如\p{Latin}限制为拉丁脚本中的字母(例如英语中使用的字母)),或\w... 请参阅man pcrepattern了解详细信息。

相关内容