TCL - 按任意数量的空格将字符串拆分到列表中

问题描述 投票:0回答:6

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

set str "AAA    B C     DFG 142               56"

现在我想得到一个列表如下:

{AAA B C DFG 142 56}

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

list split whitespace tcl
6个回答
15
投票
set text "Some arbitrary text which might include \$ or {"
set wordList [regexp -inline -all -- {\S+} $text]

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


9
投票

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

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

它将输出以下内容:

{AAA B C DFG 142 56}

5
投票

来自 tcllibtextutil::split 模块有一个

splitx
过程,它完全可以满足您的需求

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

2
投票

从 Tcl 8.5 开始,以下内容也适用:

list {*}$str

(前提是该字符串也是一个正确的列表,如问题中所示)。输出是所需的列表。

文档: 列表{*}(语法)


1
投票

我知道这已经很旧了,但如果其他人将来遇到这个问题,我会添加我的解决方案。我将未知数量的空格替换为一个空格字符,以允许拆分正常工作,类似于斯科特的答案:

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. 

0
投票

设置地图[list {*}$str]

这将返回原始 str 作为子字符串列表,忽略空格。 您可以获取列表中的第一项,然后使用

首先设置[lindex $map 0]

© www.soinside.com 2019 - 2024. All rights reserved.