$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)
正如一位评论者所提到的,后者在一般情况下可能会更好,因为正则表达式通常包含许多反斜杠(/),并且{}括号不需要像""引号那样需要大量令人分心的额外反斜杠转义.
另一种选择,正则表达式的重量级较轻 [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)