我有一个棘手的问题。我需要对大量的xml文件(500+)进行微小的更改。此更改涉及将值从“false”切换为“true”。需要更改的行如下所示:
<VoltageIsMeasuredLineLine>false</VoltageIsMeasuredLineLine>
它需要成为:
<VoltageIsMeasuredLineLine>true</VoltageIsMeasuredLineLine>
不幸的是,每个文件中都有很多这类标记的实例,因此我们无法进行简单的查找和替换。使这组标签与众不同的是它们在以下几行后出现:
<CID>STATIONNAME.BUS.STATIONNAME.DKV</CID>
但是,每个文件都有不同的站名,所以我使用通配符来过滤它们。
<CID>.*.BUS.*.DKV</CID>
所以代码看起来像这样:
<CID>STATIONNAME.BUS.STATIONNAME.DKV</CID>
<tag>Some Number of Other lines</tag>
<tag>Some Number of Other lines</tag>
<tag>Some Number of Other lines</tag>
<VoltageIsMeasuredLineLine>false</VoltageIsMeasuredLineLine>
代码中的其他部分如下所示:
<CID>STATIONNAME.COLR.STATIONNAME.FCLR</CID>
<tag>Some Number of Other lines</tag>
<tag>Some Number of Other lines</tag>
<tag>Some Number of Other lines</tag>
<VoltageIsMeasuredLineLine>false</VoltageIsMeasuredLineLine>
所以我使用CID .BUS .DKV行作为起点。基本上我需要更改直接在CID .BUS .DKV线之后出现的VoltageisMeasured线的第一次出现。但是,我之间还有很多其他的行(没有一个在文件到文件中是一致的)我不关心并且正在弄乱我的搜索。
我被建议尝试Lookahead,但它没有用。这就是我被告知尝试的代码:
(?!<CID>.*.BUS.*.DKV</CID>(.*?)<VoltageIsMeasuredLineLine>false</VoltageIsMeasuredLineLine>
Hower,该行也返回没有.BUS和.DKV的行,这是确定此部分唯一性的真正重要因素。如何修改此Lookahead以便它只返回在CID部分中具有.BUS和.DKV的部分?
我的另一个想法是选择CID和电压部分之间的所有内容,将选择保留在组中,然后按原样打印前两组,并替换第三组。像这样:
(<CID>.*.BUS.*.DKV</CID>)(.*)(<VoltageIsMeasuredLineLine>false</VoltageIsMeasuredLineLine>)
并替换为
\1\2<VoltageIsMeasuredLineLine>true</VoltageIsMeasuredLineLine>
但是CID部分仍有问题。我敢肯定这些通配符是问题的一部分,但我已经碰壁了。任何帮助表示赞赏!
答案 0 :(得分:0)
使用替换
在Notepad ++(版本&gt; = 6.0)中尝试以下操作激活选项匹配换行符和
设置查找内容:
(<CID>[A-Za-z\.]*BUS[A-Za-z\.]*</CID>.*?<VoltageIsMeasuredLineLine>)false
并在替换为:
\1true
假设每个STATIONNAME.BUS.STATIONNAME.DKV都有一个对应的VoltageIsMeasuredLineLine(我从你的问题中读到)
诀窍是,使用贪婪的搜索。我在VoltageIsMeasuredLineLine之后寻找第一个VoltageIsMeasuredLineLine