2010-06-20 117 views
2

我想這樣做:重建字符串在Python

temp=a.split() 
#do some stuff with this new list 
b=" ".join(temp) 

其中a是原始字符串,b是已被修改後。問題是,執行這些方法時,新行將從新字符串中刪除。那麼我怎樣才能做到這一點而不刪除換行符?

+0

哪些換行符被刪除?你能擴大/澄清這個問題嗎? – mikej 2010-06-20 22:37:25

+0

嘗試將字符串拆分爲單詞,進行一些修改,然後重新組合。同時保持原始換行符和空格不變 – yydl 2010-06-20 22:39:25

+0

您的意思是b =「」.join(temp)? – tlayton 2010-06-20 22:43:41

回答

7

我在你的第三行假設你的意思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根據需要,相當於它在原始位置的位置。

0

我真的不明白你的問題。你能舉一個你想要做什麼的例子嗎?

不管怎樣,這也許可以幫助:

b = '\n'.join(a) 
+0

是的。但是,空間不會保留 – yydl 2010-06-20 22:38:47

0

首先,我認爲,當你說

b = " ".join(a) 

實際上,你的意思是

b = " ".join(temp) 

當你調用拆分( )沒有指定分隔符,函數將解釋任何長度的空白作爲分隔符。我相信空格包含換行符,所以當你分割字符串時,這些字符會消失。嘗試顯式地將分隔符(例如簡單的「空格字符」)傳遞給split()。如果一行中有多個空格,使用這種拆分方式將會將它們全部刪除,並在返回的列表中包含一系列「」空字符串。

要恢復原始間距,只要確保從split()中用作分隔符的相同字符串調用join(),並且不要從中間字符串列表中刪除任何元素。

1

你需要使用正則表達式來撕開你的字符串。結果匹配對象可以爲您提供與各種子表達式匹配的部分的字符範圍。

由於您可能有任意數量的由空白分隔的部分,因此您將不得不在字符串內的不同起始點處多次匹配字符串。

如果這個答案讓你感到困惑,我可以查找適當的參考資料並放入一些示例代碼。我並不是真的擁有所有的圖書館,只是他們做了什麼。 :-)

1

這取決於你想要分裂的東西。

爲默認的拆分使用 '\ n', '' 作爲delimitador,你可以使用

a.split(" ") 

如果只想空格作爲delimitador。

http://docs.python.org/library/stdtypes.html#str.split

+0

請注意,使用帶參數的split與split()不同之處在於,如果輸入具有連續的空白序列,則輸出還將包含空字符串。例如'「兩個空格」.split(「」)' - >'['two','','spaces']'。 *編輯*:該死的,SO註釋格式不會在「兩個空格」中顯示額外的空格 – 2010-06-20 22:47:53