我一直在使用python和regex来清理一个文本文件。我一直在使用以下方法,而且通常都是有效的:

mystring = compiledRegex.sub("replacement",mystring)

所讨论的字符串是一个包含许多嵌入换行符的完整文本文件。一些编译的regex使用re.DOTALL选项覆盖多行。如果编译的regex中的最后一个字符是一个字符,则上面的命令将替换regex的所有匹配项,但以字符串结尾的最后一个换行符结尾的匹配项除外。事实上,在处理换行符和出现在字符串末尾的多个换行符时,我还遇到了其他一些毫无疑问的相关问题。有人能告诉我这里发生了什么事吗?提前谢谢。

最佳答案

我打赌你的文件不会以换行符结尾。。。

>>> content = open('foo').read()
>>> print content
TOTAL:.?C2
abcTOTAL:AC2
defTOTAL:C2
>>> content
'TOTAL:.?C2\nabcTOTAL:AC2\ndefTOTAL:C2'

…因此最后一行与regex不匹配:
>>> regex = re.compile('TOTAL:.*?C2\n', re.DOTALL)
>>> regex.sub("XXX", content)
'XXXabcXXXdefTOTAL:C2'

如果是这种情况,解决方法很简单:只需匹配换行符或文件结尾(使用$):
>>> regex = re.compile('TOTAL:.*?C2(\n|$)', re.DOTALL)
>>> regex.sub("XXX", content)
'XXXabcXXXdefXXX'

关于python - 在python多行字符串末尾处理\n字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6335901/

10-12 14:20
查看更多