我想這樣做:重建字符串在Python
temp=a.split()
#do some stuff with this new list
b=" ".join(temp)
其中a是原始字符串,b是已被修改後。問題是,執行這些方法時,新行將從新字符串中刪除。那麼我怎樣才能做到這一點而不刪除換行符?
我想這樣做:重建字符串在Python
temp=a.split()
#do some stuff with this new list
b=" ".join(temp)
其中a是原始字符串,b是已被修改後。問題是,執行這些方法時,新行將從新字符串中刪除。那麼我怎樣才能做到這一點而不刪除換行符?
我在你的第三行假設你的意思join(temp)
,不join(a)
。
要拆分,但保持精確的「分離器」,你需要的re.split功能(或RE對象split
法)捕獲組:
>>> import re
>>> f='tanto va\nla gatta al lardo'
>>> re.split(r'(\s+)', f)
['tanto', ' ', 'va', '\n', 'la', ' ', 'gatta', ' ', 'al', ' ', 'lardo']
的作品,你會得到從剛剛re.split
是在索引0,2,4,...而奇數索引具有「分隔符」 - 您將用來在末尾重新加入列表的空白的確切序列(用''.join
)以獲得原始字符串所具有的相同空格。
您可以在等間隔的物品直接工作,或者你可以先提取它們:
>>> x = re.split(r'(\s+)', f)
>>> y = x[::2]
>>> y
['tanto', 'va', 'la', 'gatta', 'al', 'lardo']
然後改變y
隨你便,如:
>>> y[:] = [z+z for z in y]
>>> y
['tantotanto', 'vava', 'lala', 'gattagatta', 'alal', 'lardolardo']
然後重新插入,並加入up:
>>> x[::2] = y
>>> ''.join(x)
'tantotanto vava\nlala gattagatta alal lardolardo'
請注意,\n
正好在p根據需要,相當於它在原始位置的位置。
我真的不明白你的問題。你能舉一個你想要做什麼的例子嗎?
不管怎樣,這也許可以幫助:
b = '\n'.join(a)
是的。但是,空間不會保留 – yydl 2010-06-20 22:38:47
首先,我認爲,當你說
b = " ".join(a)
實際上,你的意思是
b = " ".join(temp)
當你調用拆分( )沒有指定分隔符,函數將解釋任何長度的空白作爲分隔符。我相信空格包含換行符,所以當你分割字符串時,這些字符會消失。嘗試顯式地將分隔符(例如簡單的「空格字符」)傳遞給split()。如果一行中有多個空格,使用這種拆分方式將會將它們全部刪除,並在返回的列表中包含一系列「」空字符串。
要恢復原始間距,只要確保從split()中用作分隔符的相同字符串調用join(),並且不要從中間字符串列表中刪除任何元素。
你需要使用正則表達式來撕開你的字符串。結果匹配對象可以爲您提供與各種子表達式匹配的部分的字符範圍。
由於您可能有任意數量的由空白分隔的部分,因此您將不得不在字符串內的不同起始點處多次匹配字符串。
如果這個答案讓你感到困惑,我可以查找適當的參考資料並放入一些示例代碼。我並不是真的擁有所有的圖書館,只是他們做了什麼。 :-)
這取決於你想要分裂的東西。
爲默認的拆分使用 '\ n', '' 作爲delimitador,你可以使用
a.split(" ")
如果只想空格作爲delimitador。
請注意,使用帶參數的split與split()不同之處在於,如果輸入具有連續的空白序列,則輸出還將包含空字符串。例如'「兩個空格」.split(「」)' - >'['two','','spaces']'。 *編輯*:該死的,SO註釋格式不會在「兩個空格」中顯示額外的空格 – 2010-06-20 22:47:53
哪些換行符被刪除?你能擴大/澄清這個問題嗎? – mikej 2010-06-20 22:37:25
嘗試將字符串拆分爲單詞,進行一些修改,然後重新組合。同時保持原始換行符和空格不變 – yydl 2010-06-20 22:39:25
您的意思是b =「」.join(temp)? – tlayton 2010-06-20 22:43:41