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