UltraEdit (или регулярное выражение MacOS): удаление нескольких строк в XML - PullRequest
0 голосов
/ 03 января 2019

У меня есть неотформатированный XML-файл, в котором я хотел бы удалить теги с определенным именем, которые содержат некоторое значение.

Пример:

<XmlElement1>
</XmlElement1>
<XmlElement2 ... >
   ...
   <Xml1SubElement someParameter="...SearchTerm..."/>
   ...
</XmlElement2>
<XmlElement3/>

... обозначает случайные символы и случайные множественные строки

В приведенном выше примере я хотел бы удалить все элементы XmlElement2, которые содержат "SearchTerm"в теле.Другими словами, выделите весь текст между <XmlElement2 и </XmlElement2> в нескольких строках, где SearchTerm находится посередине, и замените на "".

Я использую UltraEdit на MacOS и знаю, какие инструменты использовать.

Ваша помощь очень важна!

1 Ответ

0 голосов
/ 03 января 2019

Строка поиска регулярного выражения Perl для этой задачи может быть, например:

(?s)^[\t ]*<XmlElement2(?:.(?!</XmlElement2>))+?SearchTerm.+?</XmlElement2>[\t ]*(?:\r?\n|\r)

Пояснение:

(?s) ... признак совпадения символов новой строки и точки в поисковом выражении.

^[\t ]* ... начать поиск в начале строки и найти 0 или более символов табуляции или пробелов.

<XmlElement2 ... начальный тег удаляемого элемента, содержащий SearchTerm.

(?:.(?!</XmlElement2>))+? ... группа без пометок, чтобы найти любой символ, один или несколько раз не жадный, если строка после текущего символа не равна </XmlElement2>. Отрицательный прогноз (?!</XmlElement2>) не позволяет выбрать блок, начинающийся с <XmlElement2 и сопоставляющий все, включая один или несколько тегов </XmlElement2> и <XmlElement2, до тех пор, пока SearchTerm не будет найден где-либо в файле.

SearchTerm ... строка, которая должна быть найдена внутри элемента XmlElement2.

.+? ... любой символ (включая символы новой строки) один или несколько раз не жадный. «Нежадный» означает здесь, чтобы остановить сопоставление символов при следующем появлении </XmlElement2>, а не при последнем появлении </XmlElement2> в файле.

</XmlElement2> ... конечный тег элемента XML, который нужно удалить, содержащий SearchTerm.

[\t ]*(?:\r?\n|\r) ... 0 или более символов табуляции или пробелов и DOS / Windows (возврат каретки + перевод строки) или UNIX (только перевод строки) или MAC (просто возврат каретки).

PS: Замена регулярного выражения Perl была протестирована с UltraEdit для Windows v22.20.0.49 в Windows XP и v25.20.0.88 в Windows 7, поскольку у меня нет Mac.

...