У меня есть сложная проблема. Мне нужно внести незначительные изменения в большое количество 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>
Но что-то все-таки не так с РТВ части. Я уверен, что эти подстановочные знаки являются частью проблемы, но я ударил стену. Любая помощь ценится!
Это похоже на работу очень хорошо! Спасибо огромное! – Colette
@Colette Когда это работает для вас, вы можете принять его как ответ – StefanG