Notepad ++搜索和替换多行,前瞻,通配符问题?

时间:2015-04-16 16:18:15

标签: search replace notepad++

我有一个棘手的问题。我需要对大量的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部分仍有问题。我敢肯定这些通配符是问题的一部分,但我已经碰壁了。任何帮助表示赞赏!

1 个答案:

答案 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