Regex для анализа HTML из CDATA с помощью C # - PullRequest
4 голосов
/ 01 мая 2009

Я хотел бы проанализировать все возвращаемые данные HTML, завернутые в CDATA.

Как пример <![CDATA[<table><tr><td>Approved</td></tr></table>]]>

Спасибо!

Ответы [ 6 ]

8 голосов
/ 01 мая 2009

Выражение для вашего примера будет

\<\!\[CDATA\[(?<text>[^\]]*)\]\]\>

Где группа "текст" будет содержать ваш HTML.

Код C #, который вам нужен:

using System.Text.RegularExpressions;
RegexOptions   options = RegexOptions.None;
Regex          regex = new Regex(@"\<\!\[CDATA\[(?<text>[^\]]*)\]\]\>", options);
string         input = @"<![CDATA[<table><tr><td>Approved</td></tr></table>]]>";

// Check for match
bool   isMatch = regex.IsMatch(input);
if( isMatch )
  Match   match = regex.Match(input);
  string   HTMLtext = match.Groups["text"].Value;
end if

Переменная «input» находится там только для того, чтобы использовать предоставленный вами пример ввода

4 голосов
/ 01 мая 2009

Я знаю, это может показаться невероятно простым, но вы пробовали string.Replace ()?

string x = "<![CDATA[<table><tr><td>Approved</td></tr></table>]]>";
string y = x.Replace("<![CDATA[", string.Empty).Replace("]]>", string.Empty);

Возможно, есть более эффективные способы справиться с этим, но может случиться так, что вам нужно что-то такое простое ...

2 голосов
/ 01 мая 2009

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

/<!\[CDATA\[(.*?)\]\]>/
1 голос
/ 01 мая 2009

Регулярное выражение для поиска разделов CDATA будет:

(?:<!\[CDATA\[)(.*?)(?:\]\]>)
0 голосов
/ 09 сентября 2011

Почему вы хотите использовать Regex для такой простой задачи? Попробуйте это:

str = str.Trim().Substring(9);
str = str.Substring(0, str.Length-3);
0 голосов
/ 01 мая 2009
Regex r = new Regex("(?<=<!\[CDATA\[).*?(?=\]\])");
...