如何在TCL中用一个逗号替换多个空格

如何在TCL中用一个逗号替换多个空格,tcl,Tcl,请告诉我如何用逗号替换多个空格,例如输入字符串 set string "boy cat dog girl man" 字符串之间可以有多个空格示例8男孩和猫之间,4狗和女孩之间 我希望它是男孩、猫、狗、女孩、男人,这很简单:你只需要使用regsub,它根据正则表达式执行替换 set string "boy cat dog girls man" regsub -all {\s+} $string , 你得到了什么 boy,cat,dog,gi

请告诉我如何用逗号替换多个空格,例如输入字符串

set string "boy      cat dog            girl     man"
字符串之间可以有多个空格示例8男孩和猫之间,4狗和女孩之间


我希望它是男孩、猫、狗、女孩、男人,这很简单:你只需要使用regsub,它根据正则表达式执行替换

set string "boy     cat   dog  girls man"
regsub -all {\s+} $string ,
你得到了什么

boy,cat,dog,girls,man

\s
匹配一个空格,
+
表示前一个原子的一个或多个,因此组合给出一个或多个空格。

另一种解决方案是使用
split
将原始(以空格分隔的)字符串分隔为单词列表,并使用
join
生成逗号分隔的字符串

set original "boy cat dog girl man"

set l [split $original]
set final [join $l ,]
对于您的示例,这很好,但无法处理原始字符串与Tcl的列表概念不正确对应的情况。它也无法处理转换,比如

boy cat dog girl man "Aunt Sally"
进入


如果您想处理这种情况,请查看软件包-特别是
csv::split
csv::join
,我们不需要做这么多工作。。试试这个。。。我会帮你完成全部工作。。不要分开。。加入

 set string "boy      cat dog            girl     man"
 set string [join $string ,]

split
对字符串有效,而不是列表,因此没有问题。但它会在有多个空格的地方为您提供空元素。您必须使用在任意空格上拆分,并且在后台使用regexp。适用于此输入,但不适用于某些更复杂的输入。可能重要,也可能不重要;提问者没有正确地指导我们。我完全同意你的观点@DonalFellows。我只是专注于给定的输入。。在这种情况下,马可的回答是完美的。
 set string "boy      cat dog            girl     man"
 set string [join $string ,]