Tcl 字符串替换

Tcl 字符串替换,tcl,Tcl,我在上面有一个字符串,其中#是动态生成的。 我必须使用tcl中的函数来替换字符串。 基本上,我需要从上面的表达式中删除逗号(,),并将其显示为 测试######请求的psy不可用# 这是我做的,但它不起作用 $arg=TEST #### Requested, NOT AVAILABLE psy #; 这是我引用函数的地方: 问题在于你的报价。实际上,您正在检查字符串“Requested”,(包括引号),但这不是您想要的。试着去掉扭曲的括号(})或双引号(“): 如果您只需要删除逗号,则可以搜索

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

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

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

$arg=TEST #### Requested, NOT AVAILABLE psy #;
这是我引用函数的地方:
问题在于你的报价。实际上,您正在检查字符串
“Requested”,
(包括引号),但这不是您想要的。试着去掉扭曲的括号(
}
)或双引号(
):

如果您只需要删除逗号,则可以搜索/替换它(只需将其替换为空字符串
“”
):


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

另一个选项,没有正则表达式那么重,是

如果不希望全局删除,请执行以下操作:

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

我建议(几乎)总是将正则表达式放在大括号中;它们往往包含许多反斜杠(特别是在任何模糊的非平凡情况下),大括号使它们更易于编写。将它们放在引号中会导致反斜杠…虽然您的答案可能有效,但应尽可能避免只使用代码的答案。最好添加一个解释,说明代码的作用以及如何解决OP的问题。谢谢
set arg "TEST #### Requested, NOT AVAILABLE psy #;"
regsub -all "Requested," $arg "Requested" arg
regsub -all "," $arg "" arg
regsub -all {,} $arg {} arg
set arg [string map { , "" } $arg]
set idx [string first , $arg]
set arg [string replace $arg $idx [incr idx]]
set hfkf "555";
set arg "TEST #### Requested, NOT AVAILABLE psy #;"
regsub -all "Requested," $arg "Requested" arg
regsub -all {"Requested,"} $arg {"Requested"} arg