tcl字符串替换

Mic*_*eal 3 tcl

$arg=TEST #### Requested, NOT AVAILABLE psy #;
Run Code Online (Sandbox Code Playgroud)

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

测试####请求不可用psy#

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

regsub -all {"Requested,"} $arg {"Requested"} arg
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*kin 14

问题是你的报价.您实际上正在检查字符串"Requested,"(包括引号),但这不是您想要的.尝试摆脱squiggly-bracket(})或双引号("):

set arg "TEST #### Requested, NOT AVAILABLE psy #;"
regsub -all "Requested," $arg "Requested" arg
Run Code Online (Sandbox Code Playgroud)

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

regsub -all "," $arg "" arg
Run Code Online (Sandbox Code Playgroud)

要么

regsub -all {,} $arg {} arg
Run Code Online (Sandbox Code Playgroud)

正如一位评论者所提到的,后者在一般情况下可能会更好,因为正则表达式通常包含许多反斜杠(/),并且{}括号不需要像""引号那样需要大量令人分心的额外反斜杠转义.


gle*_*man 8

另一种选择,正则表达式的重量级较轻 [string map]

set arg [string map { , "" } $arg]
Run Code Online (Sandbox Code Playgroud)

如果您不想要全局删除:

set idx [string first , $arg]
set arg [string replace $arg $idx [incr idx]]
Run Code Online (Sandbox Code Playgroud)