短上下文:我有一个 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 终止的字符串。然后将它们放在一起,我得到了带有混合终止的字符串。
答案 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