2015-04-16 2 views
0

У меня есть сложная проблема. Мне нужно внести незначительные изменения в большое количество xml-файлов (500+). Изменение включает в себя изменение значения от «false» до «true». Линия, которая должна изменить выглядит следующим образом:Notepad ++ Поиск и замена несколькими строками, Lookahead, Wildcard?

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

Поэтому я использую линию ИДС .BUS .DKV как отправная точка. В основном мне нужно изменить первое появление линии VoltageisMeasured, которая появляется непосредственно после линии CID .BUS. DKV. Но между ними существует много других строк (ни один из которых не согласуется с файлом в файл), что меня не волнует, и запутывают мой поиск.

Мне предложили попробовать Lookahead, но это не сработало. Этот код мне сказали попробовать:

(?!<CID>.*.BUS.*.DKV</CID>(.*?)<VoltageIsMeasuredLineLine>false</VoltageIsMeasuredLineLine> 

Хауэр, что линия также возвращение линии без .BUS и .DKV, которые являются очень важными факторами при определении уникальности этой секции. Как я могу изменить этот Lookahead так, чтобы он возвращал только разделы, в которых были .BUS и .DKV в части CID?

Еще одна идея, которую я имел, заключалась в том, чтобы выбрать все между элементами CID и Voltage, сохранить группы в группах, а затем напечатать первые две группы как есть, и заменить третью. Как это:

(<CID>.*.BUS.*.DKV</CID>)(.*)(<VoltageIsMeasuredLineLine>false</VoltageIsMeasuredLineLine>) 

и заменить

\1\2<VoltageIsMeasuredLineLine>true</VoltageIsMeasuredLineLine> 

Но что-то все-таки не так с РТВ части. Я уверен, что эти подстановочные знаки являются частью проблемы, но я ударил стену. Любая помощь ценится!

ответ

0

Попробуйте следующее в Notepad ++ (Version> = 6.0) с заменой

Activate Опция соответствует новой строки и

набор в Найти:

(<CID>[A-Za-z\.]*BUS[A-Za-z\.]*</CID>.*?<VoltageIsMeasuredLineLine>)false 

и Заменить:

\1true 

предположение что каждый STATIONNAME.BUS.STATIONNAME.D У KV есть одна соответствующая VoltageIsMeasuredLineLine (как я читал из вашего вопроса)

Хитрость заключается в использовании жадного поиска. Я ищу первую VoltageIsMeasuredLineLine после VoltageIsMeasuredLineLine

+0

Это похоже на работу очень хорошо! Спасибо огромное! – Colette

+0

@Colette Когда это работает для вас, вы можете принять его как ответ – StefanG

Смежные вопросы