tcl字符串替换

时间:2012-04-10 18:54:41

标签: tcl

$arg=TEST #### Requested, NOT AVAILABLE psy #;

我上面有一个字符串,其中#是动态生成的。 我必须在tcl中使用一个函数来进行字符串替换。 基本上我需要从上面的表达式中删除逗号(,)并将其显示为

TEST ####请求不可用psy#

这就是我所做的,但它不起作用。

regsub -all {"Requested,"} $arg {"Requested"} arg

这是我引用函数的地方: http://www.tcl.tk/man/tcl8.5/TclCmd/regsub.htm

3 个答案:

答案 0 :(得分:14)

问题是你的引用。您实际上正在检查字符串"Requested,"(包括引号),但这不是您想要的。尝试摆脱波浪形括号(})或双引号("):

set arg "TEST #### Requested, NOT AVAILABLE psy #;"
regsub -all "Requested," $arg "Requested" arg

如果你需要摆脱的只是逗号,你可以搜索/替换它(只需用空字符串""替换它):

regsub -all "," $arg "" arg

regsub -all {,} $arg {} arg

正如评论者所提到的,后者在一般情况下可能更好,因为正则表达式通常包含许多反斜杠(/)而{}括号不需要大量分散注意力的额外反斜杠的转义方式与""引号相同。

答案 1 :(得分:8)

正则表达式的另一个选项,即重量级的重量级为[string map]

set arg [string map { , "" } $arg]

如果您不想要全局删除:

set idx [string first , $arg]
set arg [string replace $arg $idx [incr idx]]

答案 2 :(得分:-2)

set hfkf "555";
set arg "TEST #### Requested, NOT AVAILABLE psy #;"
regsub -all "Requested," $arg "Requested" arg
regsub -all {"Requested,"} $arg {"Requested"} arg