用Python重构字符串

yyd*_*ydl 2 python

我想做的事情如下:

temp=a.split()
#do some stuff with this new list
b=" ".join(temp)
Run Code Online (Sandbox Code Playgroud)

其中a是原始字符串,b是修改后的字符串.问题是,在执行此类方法时,新行将从新字符串中删除.那么如何在不删除换行符的情况下执行此操作呢?

Ale*_*lli 7

我假设你的第三行是你的意思join(temp),而不是join(a).

要拆分并保留精确的"拆分器",您需要具有捕获组的re.split功能(或splitRE对象的方法):

>>> import re
>>> f='tanto va\nla gatta al lardo'
>>> re.split(r'(\s+)', f)
['tanto', ' ', 'va', '\n', 'la', ' ', 'gatta', ' ', 'al', ' ', 'lardo']
Run Code Online (Sandbox Code Playgroud)

你从中得到的碎片re.split是在索引0,2,4 ......,而奇数索引有"分隔符" - 你将用来重新加入列表的空格的确切序列(with ''.join)获得原始字符串所具有的相同空格.

您可以直接在均匀间距的项目上工作,也可以先提取它们:

>>> x = re.split(r'(\s+)', f)
>>> y = x[::2]
>>> y
['tanto', 'va', 'la', 'gatta', 'al', 'lardo']
Run Code Online (Sandbox Code Playgroud)

然后改变y你的意思,例如:

>>> y[:] = [z+z for z in y]
>>> y
['tantotanto', 'vava', 'lala', 'gattagatta', 'alal', 'lardolardo']
Run Code Online (Sandbox Code Playgroud)

然后重新插入并加入:

>>> x[::2] = y
>>> ''.join(x)
'tantotanto vava\nlala gattagatta alal lardolardo'
Run Code Online (Sandbox Code Playgroud)

请注意,根据\n需要,它恰好位于与原始位置相当的位置.