您好我是TCL的新手,请帮我提供代码,方法。例如,有一个字符串 (abcgfhdskls12345)HELLO(hikjkflklfk) (bkjopkjjkl)HI(kjkkjjuilpp)
我只想删除()之间的所有内容,并且只想打印Hi和Hello
答案 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