我有一些文件可以使用\r
,\n
或\r\n
作为其换行符模式。
我尝试将它们全部更改为\r\n
,并删除连续的换行符。从理论上讲,这很容易,任何数量的very simple regexes都可以工作。
但实际上,
text = re.sub(
reg_exp,
r'\r\n',
text)
在这个字符串上(显示行尾字符),
<ul>␍␊
␍␊
<li><a href="#">link</a></li>␍␊
␍␊
<li><a href="#">link</a></li>␍␊
<li><a href="#">link</a></li>␍␊
␍␊
<li><a href="#">link</a></li>␍␊
␍␊
</ul>␍␊
- 对于
reg_exp = r'[\r\n]{2,}'
,
<ul>␍
␍␊
<li><a href="#">link</a></li>␍
␍␊
<li><a href="#">link</a></li>␍␊
<li><a href="#">link</a></li>␍
␍␊
<li><a href="#">link</a></li>␍
␍␊
</ul>␍␊
- 对于
reg_exp = r'[\r\n]+'
,
<ul>␍
␍␊
<li><a href="#">link</a></li>␍
␍␊
<li><a href="#">link</a></li>␍
␍␊
<li><a href="#">link</a></li>␍
␍␊
<li><a href="#">link</a></li>␍
␍␊
</ul>␍
␍␊
我不知道为什么
我的正则表达式是否由于某种原因与\r
不匹配?
3条答案
按热度按时间mefy6pfw1#
我不确定你是否正确地复制/粘贴了你的示例字符串,但是在
\r\n
字符串的每个出现之间都有一个额外的字符,所以基本上是下面的正则表达式:将删除任何:
完整测试:
下面的正则表达式:
也可以工作,可以支持
\n
-only字符串。t8e9dugd2#
您也可以在字符串上使用
splitlines()
,并使用'\r\n'
连接行。9rnv2umw3#
原来问题是当Python将字符串写回Windows文件系统时。它对行尾做了一些意想不到的决定。具体而言,委员会决定:
\r
应写入\r
\n
应该写**\r\n
(什么!?)**zmo和Louis都有在Python控制台中工作的答案,问题中的代码也是如此。
为了完整起见,这是
write()
的外观: