2014-05-23 27 views
0

讓我們說這是文字輸入去除連續的空格,但是允許單個空格的正則表達式二郎

Text = "\s\n\t\s\s\n\t\s\n\s\s Hello\n\n\n\n\n\n\n\n\s\s\t\t\s\t Hello \s\s\n\n\n\t\s\s\s\n\t"  

我只想刪除連續(空格或換行或製表符),但保留單的人也換行,隨後通過空間應\ N代替......我想輸出是

"Hello\nHello" 

我已經試過這遠遠

RemoveTrails = re:replace(Text, "(^\\s+)|(\\s+$)", "", [global,{return,list}]), 
Singlenewline = re:replace(RemoveTrails, "(\\n{2,})", "\n", [global,{return,list}]), 
TrimmedText = re:replace(Singlenewline, "(\\s{2,})", "\s", [global,{return,list}]) 

這給了我輸出

"Hello\n \t\t \t Hello" 

我不能走的更遠......我想應該有一個簡單的方法來達到預期的輸出...請指導我在此

回答

1

好,\s是不是一個有效的字符,所以你的輸入文字是有點關閉。校正此後,然而,這應該做你要找的內容:

re:replace(Text, "([\r\n]?)\\s+", "\\1 ", [global, multiline, {return, list}]). 

與「RemoveTrails」正則表達式組合清潔任何不必要的前導/尾隨空白。不幸的是,你不能用一個正則表達式來做所有的事情(或者你可以,但我不想看到它)

+1

那麼,'\ s'是一個有效的字符,但它不是一個空白字符。不要將'\ s'與空格的字符代碼混淆;它是一個正則表達式中的字符*類*,覆蓋空格和製表符(以及多行中的換行符)。另外,請注意我如何不在'[\ r \ n]'中對斜槓進行雙重轉義;這裏沒有必要。 –

+0

感謝您糾正和幫助我湯羹d'Campbells ...但現在的輸出是「你好\ n \ n \ n \ n你好」... – user27841

+0

@ user27841 - 我得到輸出「你好\ n你好」;確保你得到了一切(包括多行選項) –

相關問題