字符串连接列表中的空字符串

时间:2021-02-12 15:05:13

标签: python string

短上下文:我有一个 Python 应用程序,它有一个混合行尾的长字符串:\n\r\n。我正在尝试使用以下代码将行尾转换为 Windows 行尾 \r\n

s = "one\r\ntwo\r\n\r\nthree\n\nfour\nfive\r\n\r\n"
lines = s.splitlines()
print(lines)
out = '\r\n'.join(lines)
print(repr(out))
print(out, end='')

输出为:

['one', 'two', '', 'three', '', 'four', 'five', '']
'one\r\ntwo\r\n\r\nthree\r\n\r\nfour\r\nfive\r\n'
one
two

three

four
five

唯一需要注意的是最后一个空字符串,我希望它为它生成一个空行,就像输入中的其他空行一样(比如“二”和“三”之间的那一行)。

奇怪的是,如果我将输入字符串更改为

s = "one\r\ntwo\r\n\r\nthree\n\nfour\nfive\r\n\r\n\r\n"

输出为:

['one', 'two', '', 'three', '', 'four', 'five', '', '']
'one\r\ntwo\r\n\r\nthree\r\n\r\nfour\r\nfive\r\n\r\n'
one
two

three

four
five

所以问题是 join() 似乎通过跳过最后一个空字符串而不一致。

长语境: 此应用程序使用 LXML 读取一些 XML 文件,这些文件具有 Unix 终止符 \n。我对它们进行了一些处理,以创建具有 Windows 终止的字符串。然后将它们放在一起,我得到了带有混合终止的字符串。

1 个答案:

答案 0 :(得分:1)

您可以使用模式来匹配可选的 \r 后跟 \n,并在替换中使用 \r\n

import re
s = "one\r\ntwo\r\n\r\nthree\n\nfour\nfive\r\n\r\n"
s = re.sub(r"\r?\n", r"\r\n", s)
print(s)
one
two

three

four
five