Regsub用于设置文本[join $ text \ n]缺少大括号错误

时间:2018-12-05 06:53:55

标签: tcl

我正在丢失该行的右括号错误

set text [join $text \n] 我的整个代码是

proc ProcessText { text} {
   regsub -all -- ({) $text {\{} text 
   set text [join $text  \n]
   return $text
}

##it starts from here
set text "{a b c"
puts $text
puts [ProcessText $text]    

如果我正在使用regsub将{替换为不会引发错误的任何适当替换,我会收到错误消息 “执行过程中缺少大括号” procProcessText {}”

如果我评论regsub,那么我会报错 “执行时列表中无与伦比的大括号 “加入$ text \ n” 有人可以在这里建议我如何在tcl中进行相同的操作。

仅供参考: 文本是一个包含很多文本信息的列表,如果我删除了{,其中也有一个{。否则就不行了。

1 个答案:

答案 0 :(得分:3)

就像Donal所感觉到的那样,变量text所保存的值的格式不符合Tcl列表,而[join]则期望这种格式。

您的选择是:

1)使用[split]将值转换为Tcl列表:

join [split $text] \n

2)避免使用[string map]完全转换为列表和[join]

string map {" " "\n"} $text

(或者,如果您无法控制输入中的空格扩散,请按照以下说明使用[regsub]

有时候,字符串最好只保留一个字符串;)

Varia

您对[regsub]的使用是有问题的,最重要的是,最好一次使用它来达到最终目的,而不是在调用[join]之前先清理输入字符串:

 regsub -all {\s+} $text "\n"

背景

您遇到错误是因为您没有正确地将正则表达式{({)中的前哨[regsub]进行转义:

regsub -all -- ({) $text {\{} text

这应该是:

regsub -all -- {\{} $text {\{} text

在您的变体中,{被认为是一个开括号,实际上在脚本的其余部分中不匹配。