2009-08-08 54 views
4

是否有一個跨平臺的庫函數可以將多行字符串摺疊爲單行字符串而不會重複空格?python中是否存在字符串摺疊庫函數?

我已經想出了一些下面的代碼片斷,但我想知道是否有一個標準的函數,我可以導入它甚至可能在C中優化?

def collapse(input): 
    import re 
    rn = re.compile(r'(\r\n)+') 
    r = re.compile(r'\r+') 
    n = re.compile(r'\n+') 
    s = re.compile(r'\ +') 
    return s.sub(' ',n.sub(' ',r.sub(' ',rn.sub(' ',input)))) 

P.S.感謝您的好意見。 ' '.join(input.split())似乎是贏家,因爲在我的情況下,實際運行速度比搜索替換預編譯的r'\s+'正則表達式要快兩倍。

+1

爲什麼問題標題中的「跨平臺」?幾乎Python中的所有東西都是跨平臺的,除了操作系統特定的東西。這顯然不是操作系統特定的,除非你省略了某些東西。 – 2009-08-08 20:43:09

+0

好點。我不知道'\ n'字符在Python中是跨平臺的。我認爲'\ n'字面意思是一個特殊的ASCII字符。 – Evgeny 2009-08-09 00:26:01

+0

它確實意味着一個特殊的ASCII字符。這個角色在所有平臺上都是一樣的 - 換行符。 – 2009-08-09 01:28:28

回答

12

內置string.split()方法各執空白的運行,這樣你就可以使用,然後加入使用空格結果列表中,這樣的:

' '.join(my_string.split()) 

下面是一個完整的測試腳本:

TEST = """This 
is  a test\twith a 
    mix of\ttabs,  newlines and repeating 
whitespace""" 

print ' '.join(TEST.split()) 
# Prints: 
# This is a test with a mix of tabs, newlines and repeating whitespace 
0
multi_line.replace('\n', '') 

將做的工作。 '\n'是python中的一個通用行結束符。

+1

謝謝。很高興知道。但它不會工作,因爲它不會在需要的地方插入空白空間,也不會刪除重複的空白空間 – Evgeny 2009-08-08 20:29:49

+0

我不確定@空間空間@Evgeny的意思,但無論如何,建議的解決方案不能解決OP的「不重複空間」要求。 – 2009-08-08 22:47:05

4

你有正確的想法,你只需要多一點仔細閱讀蟒蛇手冊:

import re 
somewhitespace = re.compile(r'\s+') 
TEST = """This 
is  a test\twith a 
    mix of\ttabs,  newlines and repeating 
whitespace""" 

somewhitespace.sub(' ', TEST) 

'This is a test with a mix of tabs, newlines and repeating whitespace'