处理Python中多行字符串末尾的\n字符
我一直在用Python和正则表达式来清理一个文本文件。我用的方法大致上是这样的:
mystring = compiledRegex.sub("replacement",mystring)
这里提到的字符串是一个完整的文本文件,里面有很多换行符。有些编译好的正则表达式可以处理多行内容,这时候我会使用re.DOTALL
这个选项。如果编译好的正则表达式最后一个字符是\n,那么上面的命令会替换掉所有匹配的内容,但会留下字符串最后的换行符不变。实际上,我在处理字符串末尾的换行符和多个换行符时,遇到了好几个相关的问题。有没有人能给我一点提示,告诉我这是怎么回事?非常感谢。
4 个回答
0
我看不太懂你说的内容,不过你可以试试在读取文件的时候,把所有连续的空行替换成一个空行。还有一个办法就是用trim()这个函数,把结尾的\n去掉,除非你真的需要它。
3
如果我理解得没错,你需要的是把每行末尾的换行符去掉,然后再遍历这个文本来查找你需要的单词。你可以试试下面的方法:
data = (line for line in text.split('\n') if line.strip())# gives you all non empty lines without '\n'at the end
现在你可以使用列表切片或者正则表达式的功能来搜索或替换你需要的任何文本。
或者你可以使用替换功能,把所有的'\n'换成你想要的内容:
text.replace('\n', '')
2
我猜你的文件最后没有换行符...
>>> content = open('foo').read()
>>> print content
TOTAL:.?C2
abcTOTAL:AC2
defTOTAL:C2
>>> content
'TOTAL:.?C2\nabcTOTAL:AC2\ndefTOTAL:C2'
...所以最后一行没有符合这个正则表达式:
>>> 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'