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

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

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

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

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

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

4

3 回答 3

14

问题是你的报价。您实际上是在检查字符串"Requested,"(包括引号),但这不是您想要的。尝试去掉花括号 ( }) 或双引号 ( "):

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

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

regsub -all "," $arg "" arg

或者

regsub -all {,} $arg {} arg

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

于 2012-04-10T19:02:59.253 回答
8

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

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

如果您不想全局删除:

set idx [string first , $arg]
set arg [string replace $arg $idx [incr idx]]
于 2012-04-10T22:26:29.250 回答
-2
set hfkf "555";
set arg "TEST #### Requested, NOT AVAILABLE psy #;"
regsub -all "Requested," $arg "Requested" arg
regsub -all {"Requested,"} $arg {"Requested"} arg
于 2014-06-20T11:39:57.520 回答