如何在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" 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!