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”,它将失败,因为无法解析为列表。