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

Как я могу заменить "<" и ">" (в содержании XML-файла) соответствующими "&lt;" и "&gt;" (с заранее известным набором тегов) с помощью регулярного выражения?

пример: <abc>fd<jkh</abc><def>e>e</def> должен привести к: <abc>fd&lt;jkh</abc><def>e&lt;e</def>

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

Ответы [ 2 ]

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

Я думаю, что шаблон

<([^>]*<)

будет соответствовать <, который встречает другой < до > (следовательно, не является частью тега)

... и шаблон

(>[^<]*)>

будет соответствовать >, который следует за другим >

var first = Regex.Replace(@"<abc>fd<jkh</abc><def>e>e</def>",@"<([^>]*?<)",@"&lt;$1");
var final = Regex.Replace(first,@"(>[^<]*?)>",@"$1&gt;");

EDIT:

Это работает, но вы должны пройти через него несколько раз. Я уверен, что есть более чистый метод, но он работает.

class Program
{
    static void Main(string[] args)
    {
        var next = @"<abc>dffs<<df</abc>";
        string current;
        do
        {
            current = next;
            next = Regex.Replace(current, @"<([^>]*?<)", @"&lt;$1");
            next = Regex.Replace(next, @"(>[^<]*?)>", @"$1&gt;");
        } while(next != current);
        Console.WriteLine(current);
        Console.ReadKey();
    }
}
0 голосов
/ 25 января 2010
s/<(?=[^<>]*<)/&lt;/g
s/>(?<=\>[^<>]*)/&gt;/g

In C #,

new Regex("<(?=[^<>]*<)").Replace(your_xml_string, "&lt;");
new Regex(">(?<=\>[^<>]*)").Replace(your_xml_string, "&gt;");

Не проверено. У меня нет C # на моей руке.

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