4

我想解析出包装在 CDATA 中的任何 HTML 数据。

举个例子<![CDATA[<table><tr><td>Approved</td></tr></table>]]>

谢谢!

4

6 回答 6

8

处理您的示例的表达式是

\<\!\[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

“输入”变量在那里只是为了使用您提供的示例输入

于 2009-05-01T17:24:38.243 回答
4

我知道这可能看起来非常简单,但是您尝试过 string.Replace() 吗?

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

可能有更有效的方法来处理这个问题,但可能是你想要一些简单的东西......

于 2009-05-01T17:21:03.277 回答
2

没有太多细节,但如果没有您没有描述的复杂性,一个非常简单的正则表达式应该匹配它:

/<!\[CDATA\[(.*?)\]\]>/
于 2009-05-01T17:22:12.493 回答
1

查找 CDATA 部分的正则表达式将是:

(?:<!\[CDATA\[)(.*?)(?:\]\]>)
于 2009-05-01T17:23:28.090 回答
0
Regex r = new Regex("(?<=<!\[CDATA\[).*?(?=\]\])");
于 2009-05-01T17:25:05.700 回答
0

为什么要使用 Regex 来完成如此简单的任务?试试这个:

str = str.Trim().Substring(9);
str = str.Substring(0, str.Length-3);
于 2011-09-09T15:47:47.713 回答