我一直在使用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/