C # Regex и массовая замена - PullRequest
       2

C # Regex и массовая замена

1 голос
/ 19 февраля 2012

Существует несколько вхождений тега ab: tag_x в строку.

Формат тега:

<ab:tag_x contents="some text" src_id="some id">

Как заменить каждый тег значением одного из его атрибутов - 'contents'?

Примеры:

<ab:tag_x contents="some text1" src_id="some id"> -> some text1
<ab:tag_x contents="some text2" src_id="some id"> -> some text2

Спасибо, LG

Ответы [ 2 ]

1 голос
/ 19 февраля 2012

Может понадобиться полировка, но вот что я получил.

class Program
{
    static void Main()
    {
        string data = "<data><ab:tag_x contents=\"some text1\" src_id=\"some id\"><br/><ab:tag_x contents=\"some text2\" src_id=\"some id\"></data>";
        string pattern = "<ab:tag_x.*?contents=\"(.*?)\".*?>";
        string replacement = "$1";
        string result = Regex.Replace(data, pattern, replacement);

        Console.WriteLine(result);
    }
}

Чтобы понять, как работает шаблон или изменить его, прочтите это MSDN на языке регулярных выражений .

Чтобы понять, как работает строка замены или изменить ее, прочитайте этот MSDN на Подстановки регулярных выражений .

НТН

0 голосов
/ 19 февраля 2012

Я рекомендую следующее:

string result = Regex.Replace(myhtml, 
  "<ab:tagx[^>]+contents=\"([^\"]*)\"[^>]*>\", 
  "$1");

Это будет обрабатывать:

  • Любое количество атрибутов до contents атрибута
  • Любое количество атрибутовпосле атрибута contents
  • Начать теги или самозакрывающиеся теги
  • Пустое содержимое (contents="")
  • LF-символов внутри тега (именно поэтому я не сделалt use .*?).

Допущения:

  • Значения атрибутов ограничиваются символами в двойных кавычках.
  • Вокруг символов пробела нетзнак равенства.
  • Теги и атрибут contents всегда строчные.
  • Каждый тег содержит атрибут contents, даже если значение пустое.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...