Создание многострочного регулярного выражения для поиска всех XML структур в файле, содержащем определенные теги и добавления атрибутов - PullRequest
0 голосов
/ 03 апреля 2020

Дорогая стека переполнения стека,

У меня довольно сложный RegEx для создания, по крайней мере, для меня; -).

Цель: поиск файла XML (на самом деле XLIFF) для теги, в которых отсутствует атрибут утвержден = "да", и добавлен тег с атрибутом состояния = "новый". Одновременно удаляем текст, который может присутствовать в теге.

Вот пример:

Найдите это:

 <trans-unit id="2c5b6ff1">
    <source xml:lang="de-de">Fehler im Aufgabe</source>
    <target xml:lang="en-us">Fehler im Aufgabe</target>
  </trans-unit>

и создайте этот вывод как замена:

 <trans-unit id="2c5b6ff1" approved="no">
    <source xml:lang="de-de">Fehler im Aufgabe</source>
    <target state="new" xml:lang="en-us"></target>
  </trans-unit>

Я не хочу находить структуры, в которых уже установлено утвержденное значение:

  <trans-unit id="77d29d58-ea84-47b0-a415-1de68425fae0" approved="yes">
    <source xml:lang="de-de">Frequenzumrichter in Störung</source>
    <target xml:lang="en-us" state="translated">Frequency inverter on disturbance</target>
  </trans-unit>

I go до сих пор, которое не работает должным образом ,

(<trans-unit(?!.*?approved=\"yes\".*?\2)[^>]*?)(/?>\r\n        <source xml:lang=\"de-de\">(.*?)<\/source>\r\n<\/trans-unit>)        <target xml:lang=\"en-us\">(.*?)<\/target>\r\n      <\/trans-unit>”

Что мне нужно сделать по-другому?

Ваша помощь очень ценится. Спасибо мил!

1 Ответ

0 голосов
/ 04 апреля 2020

Это работает:

ПОИСК для:

  (<trans-unit id=\"(.*?)\"(?!.*?approved=\"yes\".*?))>\r\n        <source xml:lang=\"de-de\">(.*?)<\/source>\r\n        <target xml:lang=\"en-us\">(.*?)<\/target>\r\n      <\/trans-unit>

ЗАМЕНИТЕ на:

  (<trans-unit id=\"\2" approved=\"no\">\r\n        <source xml:lang=\"de-de\">\3<\/source>\r\n        <target state=\"new\" xml:lang=\"en-us\"><\/target>\r\n      <\/trans-unit>

Не очень элегантно, но это делает работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...