String “如何删除字符”;{“和”};在使用TCL从文件中读取字符串之后,是否从字符串中读取?

String “如何删除字符”;{“和”};在使用TCL从文件中读取字符串之后,是否从字符串中读取?,string,tcl,String,Tcl,字符串: {ii= 10 } & {jj= 2 } 我需要: ii= 10 & jj= 2 我试过: string trim,string replace,lreplace, 它们对我不起作用。如果你有 set x "{ii= 10 } & {jj= 2 }" 你能行 string map {\{ {} \} {}} $x # -> ii= 10 & jj= 2 即,用空字符串替换文字左大括号和右大括号 但是您的字符串实际上看起来很像列表的字符串

字符串:

{ii= 10 } & {jj= 2 }
我需要:

ii= 10 & jj= 2
我试过:
string trim
string replace
lreplace
, 它们对我不起作用。

如果你有

set x "{ii= 10 } & {jj= 2 }"
你能行

string map {\{ {} \} {}} $x
# -> ii= 10  & jj= 2 
即,用空字符串替换文字左大括号和右大括号

但是您的字符串实际上看起来很像列表的字符串表示形式,自动插入大括号以保留空白。把它作为一个列表,你所需要做的就是

join $x
# -> ii= 10  & jj= 2 
使用
string trim
不起作用,因为它只删除字符串末尾的字符:

string trim $x \{\}
# -> ii= 10 } & {jj= 2 
在这种情况下,
stringreplace
命令的工作量太大了

lreplace
命令作用于列表元素,而不是字符串中的字符

文档:,

这应该可以:

% set x "{ii= 10 } & {jj= 2 }"
{ii= 10 } & {jj= 2 }
% regsub -all {\{|\}} $x ""
ii= 10  & jj= 2

在这里,它只是删除所有的大括号并替换为空字符串——就像它删除它们一样

看起来是这样的:{ii=10}&{jj=2},其中第一个列表中的元素是“ii”,“=”,“10”和第二个列表“jj”,“=”,“2”@LeoLima:我看到了一个包含三个字符串的列表:“ii=10”,“&”,“jj=2”。字符串当然可以被视为列表,但是第一个和最后一个字符串不是规范的Tcl列表,正如尾随空格所示。