如何在TCL中严格使用正则表达式删除字符串中的重复字符? 例如,我有一个像这样的字符串 aabbcddeffghh
,我只需要“abcdefgh
”这样的字符。我尝试使用 lsort unique
,我能够得到唯一的字符:
join [lsort -unique [split $mystring {}]]
但我只需要使用 regexp
命令。
请您参考如下方法:
您不能仅使用 Tcl 的 regsub
命令从字符串中删除所有不连续的双字符。它不支持访问先行序列中的反向引用,这意味着任何删除方案都必然会遇到匹配区域重叠的问题。
最简单的解决方法是用 while
循环(主体为空)包裹起来,利用 regsub
将返回在给定 a 时执行的替换次数这一事实用于存储结果的变量(下面的最后一个参数):
set str "mississippi mud pie"
while {[regsub -all {(.)(.*)\1+} $str {\1\2} str]} {}
puts $str; # Prints "misp ude"