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

Мне нужно заменить неопределенные теги внутри строки XML.

пример: <abc> <>sdfsd <dfsdf></abc><def><movie></def> (определены только <abc> и <def>)

должно привести к: <abc> &lt;&gt;sdfsd &lt;dfsdf&gt;</abc><def>&lt;movie&gt;<def> <> и <dfsdf> не предопределены как и не имеют закрывающего тега.

это должно быть сделано с помощью регулярного выражения !. не использовать загрузку XML и тому подобное.

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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 января 2010

Как насчет этого:

    string s = "<abc> <>sdfsd <dfsdf></abc><def><movie></def>";
    string regex = "<(?!/?(?:abc|def)>)|(?<!</?(?:abc|def))>";
    string result = Regex.Replace(s, regex, match =>
    {
        if (match.Value == "<")
            return "&lt;";
        else
            return "&gt;";
    });
    Console.WriteLine(result);

Результат:

<abc> &lt;&gt;sdfsd &lt;dfsdf&gt;</abc><def>&lt;movie&gt;</def>

Кроме того, при тестировании на другом тестовом примере (который, кстати, я нашел в комментарии к другому вопросу):

<abc>>sdfsdf<<asdada>>asdasd<>asdasd<asdsad>asds<</abc>

Я получаю этот результат:

<abc>&gt;sdfsdf&lt;&lt;asdada&gt;&gt;asdasd&lt;&gt;asdasd&lt;asdsad&gt;asds&lt;</abc>

Позвольте мне угадать ... это не работает для вас, потому что вы только что подумали о новом требовании? ;)

1 голос
/ 25 января 2010

это должно быть сделано с помощью регулярного выражения! не использовать загрузку XML и тому подобное.

Я должен забить этот гвоздь сапогом! Не использовать молоток и тому подобное. Это старая история:)

Вам нужно будет предоставить больше информации. Разрешены ли «допустимые» теги для вложения? Могут ли «допустимые» теги измениться в любой момент? Насколько надежным это должно быть?

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

s/<(?!\/?(your|valid|tags))([^>]*)>/&lt;$1&gt;/g
...