re.sub()不保留空格和新行

时间:2017-01-03 13:15:17

标签: python python-2.7 python-3.x

我有一个包含以下行的xml文件:

           <CREATION_DATE>2009-12-20T10:47:07.000Z</CREATION_DATE> 

我想用以下内容替换:

           <CREATION_DATE>XXX</CREATION_DATE> 

认为在我应该修改的python脚本中使用re模块非常简单。我做了类似的事情:

if '</CREATION_DATE>' in ligne:
    out_lines[i] = re.sub(r'(^.*<CREATION_DATE>).*(</CREATION_DATE>.*$)', r'\1XXX\2', ligne)

具有日期的字段已正确替换,但在此过程中将丢失尾随的新行和缩进。我尝试将lignesub函数的结果转换为带有.encode('string-escape')的原始字符串,但没有成功。我是python中的菜鸟,但我对正则表达式有点习惯,我真的看不出它是错的。

2 个答案:

答案 0 :(得分:2)

另一种更简单且更可靠的替换XML元素文本的方法是使用 XML解析器。甚至有one in the Python Standard Library

>>> import xml.etree.ElementTree as ET
>>> 
>>> s = '<ROOT><CREATION_DATE>2009-12-20T10:47:07.000Z</CREATION_DATE></ROOT>'
>>> root = ET.fromstring(s)
>>> root.find("CREATION_DATE").text = 'XXX'
>>> ET.tostring(root)
'<ROOT><CREATION_DATE>XXX</CREATION_DATE></ROOT>'

答案 1 :(得分:0)

正如评论中所述,变量ligne在代码中的其他地方被删除了空格和ligne = ligne.strip()的新行...我没有删除我的问题,因为alecxe对xml模块的回答是非常有用。