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

Python re.sub()不保留空格和新行,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我有一个包含以下行的xml文件: <CREATION_DATE>2009-12-20T10:47:07.000Z</CREATION_DATE> 带日期的字段已正确替换,但在该过程中,尾随的新行和缩进将丢失。我尝试使用.encode('string-escape')将ligne和sub函数的结果转换为原始字符串,但没有成功。我是python的noob,但我对regex有点习惯,我真的看不出我做错了什么。替换XML元素文本的另一种更简单、更可靠的方

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

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

带日期的字段已正确替换,但在该过程中,尾随的新行和缩进将丢失。我尝试使用
.encode('string-escape')
ligne
sub
函数的结果转换为原始字符串,但没有成功。我是python的noob,但我对regex有点习惯,我真的看不出我做错了什么。

替换XML元素文本的另一种更简单、更可靠的方法是使用XML解析器。甚至还有:

>将xml.etree.ElementTree作为ET导入
>>> 
>>>s='2009-12-20T10:47:07.000Z'
>>>root=ET.fromstring(s)
>>>root.find(“创建日期”).text='XXX'
>>>ET.tostring(根)
“XXX”

替换XML元素文本的另一种更简单、更可靠的方法是使用XML解析器。甚至还有:

>将xml.etree.ElementTree作为ET导入
>>> 
>>>s='2009-12-20T10:47:07.000Z'
>>>root=ET.fromstring(s)
>>>root.find(“创建日期”).text='XXX'
>>>ET.tostring(根)
“XXX”

如注释中所述,变量
ligne
在代码的其他地方用
ligne=ligne.strip()。。。不过,我并没有删除我的问题,因为alecxe对xml模块的回答非常有用。

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

无法重现。你确定还有什么东西没有过滤掉缩进和尾随换行符吗?我目前正在一个解释器中进行测试,它按照我的意愿工作,我认为在处理变量
ligne
…的过程中上游出现了一些错误,这两种情况都无法重现。我已经和它做了你想要的python 2.7无法复制。你确定还有什么东西没有过滤掉缩进和尾随换行符吗?我目前正在一个解释器中进行测试,它按照我的意愿工作,我认为在处理变量
ligne
…的过程中上游出现了一些错误,这两种情况都无法重现。我已经在python 2.7中实现了您想要的功能
           <CREATION_DATE>XXX</CREATION_DATE> 
if '</CREATION_DATE>' in ligne:
    out_lines[i] = re.sub(r'(^.*<CREATION_DATE>).*(</CREATION_DATE>.*$)', r'\1XXX\2', ligne)
>>> 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>'