удаление тега XML с помощью регулярного выражения - PullRequest
0 голосов
/ 18 февраля 2010

Мне нужно удалить тег «изображение» с помощью регулярных выражений.

Я работаю с C # .Net

Пример <rrr><image from="91524" to="92505" /></rrr> должен стать:

<rrr></rrr>

Любой ???

Ответы [ 3 ]

8 голосов
/ 18 февраля 2010

Вы не должны использовать regex для этой задачи, особенно когда .NET предоставляет такие мощные инструменты для обработки XML:

XElement xml = XElement.Parse("<rrr><image from=\"91524\" to=\"92505\" /></rrr>");
xml.Descendants("image").Remove();

Однако, если вы настаиваете на этом с помощью регулярных выражений, давайте посмотрим, что произойдет:

string xml = "<rrr><image from=\"91524\" to=\"92505\" /></rrr>";
string output = Regex.Replace(xml, "<image.*?>", "");

Этот метод имеет некоторые проблемы, хотя первый метод решает за вас. Пример задачи:

  • Не обрабатывает чувствительность к регистру.
  • > символов в атрибутах могут запутать регулярное выражение.
  • Символы новой строки не будут совпадать правильно.
  • Неправильно соответствует другим тегам, которые начинаются с изображения, например <image2 />.
  • XML-комментарии могут вызвать проблемы.
  • Не обрабатывает <image /> и <image></image>.
  • и т.д ...

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

0 голосов
/ 18 февраля 2010

Несмотря на то, что XML очень регулярный и страдает от драконовской политики «подтверди или умри», этот вопрос переполнения стека окажется очень полезным.

Регулярные выражения являются мощными - но инструменты XML в .NET лучше подходят для этой задачи, потому что они предназначены для такого рода вещей. Вы можете манипулировать XML , основываясь на его структуре , чего не могут сделать регулярные выражения, потому что они видят ваш XML как текст.

XML - это текст, но это текст с определенной структурой. Воспользуйтесь этим известным качеством.

0 голосов
/ 18 февраля 2010

Попробуйте это:

<image[^>]*>

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