擅长:python、mysql、java
<p>您的正则表达式正确匹配的<code>\n</code>字符前面没有<code>\r</code>:</p>
<pre><code>>>> re.search('(?<!\r)\n', 'abc\r')
>>> re.search('(?<!\r)\n', 'abc\r\n')
>>> re.search('(?<!\r)\n', 'abc\n')
<_sre.SRE_Match object; span=(3, 4), match='\n'>
</code></pre>
<p>你的<code>if</code>和<code>write</code>错了:</p>
<pre><code>if matchObj: # "If line ends with '\n'"
# Won't strip anything, because line ends with '\n', not '\r\n'.
newfile.write(line.rstrip('\r\n'))
else:
newfile.write(line)
</code></pre>
<p>你可能想这样做:</p>
<pre><code>if not matchObj: # "If line ends with '\r\n'"
# Note that strip('\r\n') removes these two characters, but does not add '\n' back.
newfile.write(line.replace('\r\n', '\n'))
else:
newfile.write(line)
</code></pre>
<p>顺便说一句,你不需要正则表达式来做你想做的事情,<code>endswith()</code>应该足够了:</p>
<pre><code>if line.endswith('\r\n'):
newfile.write(line.replace('\r\n', '\n'))
else:
newfile.write(line)
</code></pre>
<p>实际上,<code>replace()</code>本身就足够了:</p>
<pre><code>newfile.write(line.replace('\r\n', '\n'))
</code></pre>