我是TCL的新手,我试图将下面的字符串拆分成一个列表:
Sep 20, 07:45:12, 100.1.1.1
我的期望是:
{Sep 20} {07:45:12} {100.1.1.1}
有人能帮我解决一个简单的问题吗?我有自己的方式,但它有点复杂 感谢
答案 0 :(得分:1)
由于您使用的是多字符分隔符序列,因此最简单的方法是使用string map
将其转换为单个罕见字符(Unicode的“不寻常”部分会执行此操作;我们将使用转义版本那个)然后split
就此而言。这真是一个单线......
set theString "Sep 20, 07:45:12, 100.1.1.1"
set pieces [split [string map {", " \uffff} $theString] \uffff]
你也可以使用Tcllib中的splitx
内容来解决这个问题,但对于这种情况来说这太过分了。
答案 1 :(得分:0)
% set foo "Sep 20, 07:45:12, 100.1.1.1"
Sep 20, 07:45:12, 100.1.1.1
% split [regsub -all {,\s+} $foo ,] ,
{Sep 20} 07:45:12 100.1.1.1
%
明确地根据需要用大括号括起任何项目。 从TCL的角度来看,它只是一种显示空格分隔字符串的机制。例如,
% split "foo bar, bar bat, bat foo" ,
{foo bar} { bar bat} { bat foo}
%
答案 2 :(得分:0)
为了完整;要求Tcl 8.6+(8.5与下面提到的纯Tcl附加组件):
set txt "Sep 20, 07:45:12, 100.1.1.1"
lmap item [split $txt ,] {string trim $item}
# => {Sep 20} 07:45:12 100.1.1.1
文档: lmap (for Tcl 8.5), lmap, set, split, string