用空行替换()的TCL代码

时间:2013-10-21 05:33:21

标签: tcl

您好我是TCL的新手,请帮我提供代码,方法。例如,有一个字符串    (abcgfhdskls12345)HELLO(hikjkflklfk)          (bkjopkjjkl)HI(kjkkjjuilpp)

我只想删除()之间的所有内容,并且只想打印Hi和Hello

4 个答案:

答案 0 :(得分:3)

您可以使用Tcl regsub删除围绕它的括号:

set x "(abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp)"
regsub -all {\(.*?\)} $x  {} x
puts $x

产生:

$ tclsh foo.tcl
HELLO HI

答案 1 :(得分:0)

我的建议是使用regsub命令,该命令根据正则表达式执行替换。你可以这样写:

set str {(abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp)}
set result [ regsub -all {\(.*?\)} $str {} ]

-all选项是必需的,因为您的模式可能在源字符串中出现多次,并且您不想仅删除第一个。

{...}内的文字是模式。您想要匹配括号内的任何内容,因此您使用\(...\)部分;转义括号是必需的,因为它们在正则表达式语法中具有特殊含义。

在括号内,您希望匹配重复零次或多次的任何字符,因此您有.*?,其中表示任何字符,*?为零 - 或者更多非贪婪的重复命令。

答案 2 :(得分:0)

你也可以在开括号或近括号上拆分字符串,然后抛出奇数元素:

set s "(abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp)"
foreach {out in} [split $s "()"] {puts $out}

HELLO

HI

答案 3 :(得分:0)

这也是一种仅使用regexp的方式。

set p {(abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp)}
set pol [regexp {(.*)(HELLO)(.*) (.*)(HI)(.*)} $p p1 p2 p3 p4 p5 p6]
puts "$p3 $p6"

o / p:HELLO HI