在Python中重组字符串
我想做类似这样的事情:
temp=a.split()
#do some stuff with this new list
b=" ".join(temp)
这里的a是原始字符串,而b是经过修改后的字符串。问题是,当我使用这种方法时,新的字符串会把换行符去掉。那么,我该怎么做才能保留换行符呢?
5 个回答
1
你需要使用正则表达式来把你的字符串拆分开。得到的匹配对象可以告诉你哪些部分符合不同的子表达式,以及它们在字符串中的位置。
因为你可能会有很多部分是用空格分开的,所以你需要在字符串的不同起始位置多次进行匹配。
如果这个回答让你感到困惑,我可以查找相关的资料并提供一些示例代码。我并不记得所有的库,只知道它们的功能。:-)
1
这要看你想要怎么分割内容。
如果你想要默认的分割方式,可以用换行符'\n'和空格' '作为分隔符,你可以使用
a.split(" ")
如果你只想用空格作为分隔符的话。
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
的位置和它在原字符串中的位置是完全一致的,这正是我们想要的效果。