List TCL-按任意数量的空格将字符串拆分为一个列表

List TCL-按任意数量的空格将字符串拆分为一个列表,list,split,whitespace,tcl,List,Split,Whitespace,Tcl,假设我有这样一个字符串: set str "AAA B C DFG 142 56" 现在我想得到如下列表: {AAA B C DFG 142 56} 为此,我想使用split函数,但在这种情况下,我会得到一些额外的空列表{}。我怎样才能得到上面的列表 set text "Some arbitrary text which might include \$ or {" set wordList [regexp -inline -all -- {\S+}

假设我有这样一个字符串:

set str "AAA    B C     DFG 142               56"
现在我想得到如下列表:

{AAA B C DFG 142 56}
为此,我想使用split函数,但在这种情况下,我会得到一些额外的空列表{}。我怎样才能得到上面的列表

set text "Some arbitrary text which might include \$ or {"
set wordList [regexp -inline -all -- {\S+} $text]
请参见:。

中的模块有一个
splitx
proc,它完全满足您的需要

package require textutil::split
set result [textutil::split::splitx $str]

您始终可以执行以下操作:

set str "AAA    B C     DFG 142               56"
set newStr [join $str " "]
{AAA B C DFG 142 56}
它将输出以下内容:

set str "AAA    B C     DFG 142               56"
set newStr [join $str " "]
{AAA B C DFG 142 56}

从Tcl 8.5开始,以下功能也起作用:

list {*}$str
(前提是字符串也是正确的列表,如问题中所述)。输出是所需的列表

文件: ,

我知道这很旧,但万一将来有人遇到这种情况,我会添加我的解决方案。我将未知数量的空格细分为一个空格字符,以允许split正确工作,类似于Scott的答案:

set str "AAA    B C     DFG 142               56"    
regsub -all { +} $str " " str ; # str is now "AAA B C DFG 142 56"
set splitout [split $str { +}] ; # Split on one or more spaces. 

哇,我不知道
regexp
可以返回列表。我会这样做,这几乎和
[split[regsub{{{2,}}$string”“][code>一样好。regsub用一个空格替换所有长度为2或2以上的空格序列,然后拆分。set wordList[regexp-inline-all--{\S+}$text]这里“-”是什么意思?如果regex以“-”字符开头,这是必要的,而且这只是一个好习惯(对于这个加上许多Tcl命令,其中第一个非开关参数可能是用户输入:
file delete--$file
switch-exact--$word
,…)顺便说一句,请参阅和for-all和-inline标志。为什么它会起作用?正如我所知,join-通过将列表元素连接在一起来创建字符串,但您的输出是一个列表?而您的输入不是一个列表…这很奇怪…字符串,列表,这在技术上是一样的。给定的输出可以轻松拆分为单独的列表元素,等等。您希望输出是一个列表,不是吗?这是因为输入可以解析为有效列表。如果输入是“AAA}B C DFG 142 56”,它将失败,因为无法解析为列表。