下面的python代码
import xml.etree.cElementTree as ET
import time
import fileinput
import re
ts = str(int(time.time()))
modifiedline =''
for line in fileinput.input("singleoutbound.xml"):
line = re.sub('OrderName=".*"','OrderName="'+ts+'"', line)
line = re.sub('OrderNo=".*"','OrderNo="'+ts+'"', line)
line = re.sub('ShipmentNo=".*"','ShipmentNo="'+ts+'"', line)
line = re.sub('TrackingNo=".*"','TrackingNo="'+ts+'"', line)
line = re.sub('WaveKey=".*"','WaveKey="'+ts+'"', line)
modifiedline=modifiedline+line
返回modifiedline字符串,在找到第一个匹配项的地方截断某些行
如何确保它为每一行返回完整的字符串?在
编辑:
我改变了我解决这个问题的方式,受到托马拉克的启发
^{pr2}$
以下是如何使用ElementTree修改XML文件,而不会意外破坏它:
需要了解的事项:
//*[@OrderName]
来查找具有OrderName
属性的所有元素。在如果没有重要原因,请不要使用regex解析XML
*
进行贪婪匹配,但实际上您似乎想要的是*?
,因为直到行中的最后一个"
而下一个"
才匹配。在因此,只需将cone中的每个
*
替换为*?
,这样就可以了(除了常见的do not regex-XML问题)。在编辑:
Regex和XML的常见问题是,您的Regex一开始工作得很好,但对于来自其他来源(例如其他导出器或甚至同一导出器的其他版本)的有效XML无效,因为在XML中表达相同内容的方式不同。例如,}相同,具体取决于命名空间的使用。在
<name att="123"></name>
或<name att="123"/>
与<name att='123' />
相同,这与用123
&;引号括起来的相同,这可能与<a:name att="123"/>
或{短:
实际上,当无法控制的内容发生变化时,您无法确定正则表达式是否仍然有效。在
但是:
相关问题 更多 >
编程相关推荐