удалить строку из XML с помощью регулярного выражения - PullRequest
0 голосов
/ 07 июня 2018

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

<ArticleId IdType="pii">S1806-83242018000100950</ArticleId>

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Чтобы удалить каждую строку с элементом ArticleId в файле, вам нужно следующее регулярное выражение:

^.*<ArticleId IdType="pii">.*$

Это не будет работать, если конечный тег не находится на той же строке.

0 голосов
/ 09 июня 2018

Использовать Регулярное выражение Perl Строка поиска:

^[\t ]*<ArticleId IdType="pii">.*</ArticleId>[\t ]*(?:\r?\n|\r|$)

Эта строка регулярного выражения ищет

  • ^ ... от начала строки
  • [\t ]* ... для 0 или более горизонтальных табуляции или пробелов (необязательные начальные табуляции / пробелы)
  • <ArticleId IdType="pii"> ... эта строка
  • .*... любой символ 0 или более раз, кроме новой строки символов
  • </ArticleId> ... эта строка
  • [\t ]* ... для 0 или более горизонтальных вкладокили пробелы (необязательные конечные табуляции / пробелы)
  • (?: ... ) ... с группой без маркировки с выражением ИЛИ внутри
  • \r?\n|\r|$ ... кареткавозврат (опционально) и перевод строки ИЛИ просто возврат каретки ИЛИ конец строки / файла.

Итак (?:\r?\n|\r|$) соответствует

  • возврат каретки + перевод строки, которыйстрока, заканчивающаяся в текстовых файлах DOS / Windows,
  • или просто перевод строки, который является строкой, заканчивающейся в текстовых файлах UNIX,
  • или просто возврат каретки, являющейся строкой, заканчивающейся в MACтекстовые файлы до MAC OS X.

$ не соответствует символам конца строки.Он просто добавляется в случае, если <ArticleId IdType="pii">.*</ArticleId> также находится в конце файла без конца строки, то есть последняя строка в файле не имеет конца строки.

Также возможна строка поиска:

[\t ]*<ArticleId IdType="pii">.*</ArticleId>[\t ]*(?:\r?\n|\r)?

Теперь удаляемый элемент XML также может находиться внутри строки, содержащей другой тег, поскольку ^ для начала удаленной строки и совпадения с окончанием строки просто необязательно.Так что это не такое ограничение строки, как поисковое выражение выше.

0 голосов
/ 07 июня 2018

Если вы хотите удалить все строки с ArticleId независимо от их содержания или атрибутов, вы можете просто выполнить поиск по этому адресу:

<ArticleId.+<\/ArticleId>
...