Regex для анализа HTML из CDATA с помощью C#
Вопрос
Я хотел бы проанализировать любые HTML-данные, которые возвращаются в формате CDATA.
В качестве примера <![CDATA[<table><tr><td>Approved</td></tr></table>]]>
Спасибо!
Решение
Выражение для обработки вашего примера будет
\<\!\[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» предназначена только для использования предоставленного вами примера входных данных.
Другие советы
Я знаю, это может показаться невероятно простым, но пробовали ли вы string.Replace()?
string x = "<![CDATA[<table><tr><td>Approved</td></tr></table>]]>";
string y = x.Replace("<![CDATA[", string.Empty).Replace("]]>", string.Empty);
Вероятно, есть более эффективные способы справиться с этим, но, возможно, вам нужно что-то более простое...
Не так много подробностей, но ему должно соответствовать очень простое регулярное выражение, если нет сложности, которую вы не описали:
/<!\[CDATA\[(.*?)\]\]>/
Регулярное выражение для поиска разделов CDATA будет:
(?:<!\[CDATA\[)(.*?)(?:\]\]>)
Regex r = new Regex("(?<=<!\[CDATA\[).*?(?=\]\])");
Почему вы хотите использовать Regex для такой простой задачи?Попробуй это:
str = str.Trim().Substring(9);
str = str.Substring(0, str.Length-3);