TCL - 将任意数量的空格分隔为一个列表

Nar*_*rek 4 whitespace split list tcl

说我有这样的字符串:

set str "AAA    B C     DFG 142               56"
Run Code Online (Sandbox Code Playgroud)

现在我想得到如下列表:

{AAA B C DFG 142 56}
Run Code Online (Sandbox Code Playgroud)

为此,我想使用split函数,但在这种情况下,我得到一些额外的空列表{}.我怎么能得到上面的清单?

ba_*_*end 13

set text "Some arbitrary text which might include \$ or {"
set wordList [regexp -inline -all -- {\S+} $text]
Run Code Online (Sandbox Code Playgroud)

请参阅:将字符串拆分为单词.

  • 如果正则表达式以" - "字符开头,这是必要的,加上它只是一个很好的习惯(对于这个加上许多Tcl命令,其中第一个非switch参数可能是用户输入的:`file delete - $ file`,`switch -exact - $ word`,...) (3认同)

Sco*_*ott 6

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

set str "AAA    B C     DFG 142               56"
set newStr [join $str " "]
Run Code Online (Sandbox Code Playgroud)

它将输出以下内容:

{AAA B C DFG 142 56}
Run Code Online (Sandbox Code Playgroud)

  • 这是有效的,因为输入可以解析为有效列表.如果输入是"AAA} BC DFG 142 56",它将失败,因为无法将其解析为列表. (5认同)

gle*_*man 5

来自tcllibtextutil::split模块有一个完全符合你要求的过程splitx

package require textutil::split
set result [textutil::split::splitx $str]
Run Code Online (Sandbox Code Playgroud)