在Tcl中,我想基于字符串拆分缓冲区。
即,
set buffer "abc def geh ijk lmn abc 123 rfs sdf abc asdfg sadfga"
现在我想根据字符串说“abc”拆分缓冲区 所以我的输出应该如下:
{ { def geh ijk lmn } { 123 rfs sdf } { asdfg sadfga}}
我尝试过使用,
set output [split $buffer "abc"]
但是这会分别根据所有a,b,c字符拆分字符串。
答案 0 :(得分:5)
split
命令将其第二个参数视为要拆分的一组字符。要获得您真正想要的内容,您需要来自Tcllib中textutil::split
包的splitx
:
package require textutil::split
textutil::split::splitx $buffer "abc"
如果您不知道您的真正拆分字符串中是否包含RE元字符(即几乎所有非字母数字字符),请使用“this is a real a literal”魔术前缀:
textutil::split::splitx $buffer ***=$splitString
(在上面两种情况下,使用您的特定缓冲区字符串,您最终还会得到一个空的第一项,表示拆分项位于缓冲区的前面。)
答案 1 :(得分:0)
set buffer "abc def geh ijk lmn abc 123 rfs sdf abc asdfg sadfga"
regsub "abc" $buffer "\n" string
split $string "\n"