用Python重构字符串

时间:2010-06-20 22:29:20

标签: python

我想做点什么:

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

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

5 个答案:

答案 0 :(得分: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']

然后重新插入并加入:

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

请注意,根据需要,\n的位置与原始位置完全相同。

答案 1 :(得分:1)

你需要使用正则表达式来撕开你的字符串。生成的匹配对象可以为您提供与各种子表达式匹配的部分的字符范围。

由于你可能有一个由空格分隔的任意大量的部分,你将不得不在字符串中的不同起点多次匹配字符串。

如果这个答案让您感到困惑,我可以查找相应的参考资料并输入一些示例代码。我并没有记住所有的图书馆,只是他们所做的。 : - )

答案 2 :(得分:1)

这取决于你想要拆分的内容。

对于默认拆分使用'\ n',''作为分隔符,您可以使用

a.split(" ") 

如果你只想要空格作为分界符。

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

答案 3 :(得分:0)

我真的不明白你的问题。你能举例说明你想做什么吗?

无论如何,这可能会有所帮助:

b = '\n'.join(a)

答案 4 :(得分:0)

首先,我假设你说

b = " ".join(a)

你的意思是

b = " ".join(temp)

当您在不指定分隔符的情况下调用split()时,该函数会将任何长度的空格解释为分隔符。我相信whitespace包含换行符,所以当你分割字符串时,这些换行符会消失。尝试将分隔符(例如简单的“”空格字符)显式传递给split()。如果连续有多个空格,则以这种方式使用split将删除它们并在返回的列表中包含一系列“”空字符串。

要恢复原始间距,只需确保从split()中用作分隔符的相同字符串调用join(),并且不从中间字符串列表中删除任何元素。< / p>