$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
答案 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