2013-10-21 48 views
3
一個逗號代替多個空間

請告訴我的方式用逗號例如輸入字符串如何與TCL

set string "boy  cat dog   girl  man" 

可以有betwee男孩和貓的串例如8之間的多個空格替換多個空格, 4狗和女孩之間

,我想它作爲boy,cat,dog,girl,man

回答

7

起來很簡單:你只需要使用regsub,執行基於正則表達式替換。

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

,你會得到

boy,cat,dog,girls,man 

\s一個單一的空間匹配,+意味着上一個原子的一個或多個,因此這種組合給人一個或多個空格

0

另一種解決方案是使用split到原始(空格分隔)的字符串分隔成單詞列表,並join做一個逗號分隔的字符串

set original "boy cat dog girl man" 

set l [split $original] 
set final [join $l ,] 

這工作正常,你的榜樣,但不會處理你的原始字符串不符合Tcl的列表概念的情況。特別是csv::splitcsv::join - 它還如果你要處理這種情況,看看在csv包不會與轉換,比如應付,

boy cat dog girl man "Aunt Sally" 

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

+0

'對字符串split'工作,而不是列表,所以沒有問題。它會給你空的元素,雖然有多個空間。 – potrzebie

+1

你將不得不使用['textutil :: split :: splitx'](http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/textutil/textutil_split.html)在任意空白處分割,並且在後臺使用regexp。 –

2

我們沒有做這麼多工作..嘗試這個...加入會做你的整個工作..不拆..剛剛加入...

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

適用於此輸入,但不適用於一些更復雜的輸入。哪些可能或可能不重要;提問者沒有正確引導我們。 –

+0

我完全同意你@DonalFellows。我只專注於給定的輸入。在這種情況下,Marco的回答是完美的。 –