regex - 如何在 tcl 中使用正则表达式严格删除重复字符

标签 regex tcl

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

关于regex - 如何在 tcl 中使用正则表达式严格删除重复字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10696322/

相关文章:

c++ - 无法将管道的写端作为文件描述符传递

c++ - regex_token_iterator 和 regex_iterator 有什么区别?

java - 如何使用 Java 使正则表达式查找街道/道路?

linux - 如何在 tcl/tk 中开发对话仪表,通过移动它来获取循环值并更新刻度小部件

tcl - 随机颜色生成器,生成可以在 TCL 中明显区分的颜色

multithreading - 防止tcl线程被主事件循环阻塞

regex - r- 多重匹配中的部分匹配

javascript - Express.js 路由器中的正则表达式

c# - 是否可以使用 String.Split 或正则表达式将字符串拆分为字符串数组并删除不在分隔符之间的部分?

tcl - 为什么 puts with '[' 失败了?