如何用TCL中的单个逗号替换多个空格

时间:2013-10-21 10:30:03

标签: tcl

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

set string "boy      cat dog            girl     man"

字符串之间可以有多个空格示例8,男孩和猫之间,4和狗和女孩之间

我希望它为boy,cat,dog,girl,man

3 个答案:

答案 0 :(得分:7)

这很简单:你只需要使用regsub,它会根据正则表达式执行替换。

set string "boy     cat   dog  girls man"
regsub -all {\s+} $string ,

你得到了

boy,cat,dog,girls,man

\s匹配单个空格,+表示前一个原子的一个或多个,因此该组合为提供了一个或多个空格

答案 1 :(得分:3)

我们不必做这么多的工作..尝试这个...加入将完成你的整个工作..不要分裂..只是加入......

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

答案 2 :(得分:0)

另一种解决方案是使用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"

boy,cat,dog,girl,man,"Aunt Sally"

如果您想处理这种情况,请查看csv包,特别是csv::splitcsv::join