我想解析用CDATA包装的任何HTML数据。

作为示例<![CDATA[<table><tr><td>Approved</td></tr></table>]]>

谢谢!

有帮助吗?

解决方案

处理你的例子的表达式是

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

组<!>“; 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

<!> quot; input <!> quot;变量就在那里只是为了使用你提供的样本输入

其他提示

我知道这可能看起来非常简单,但你尝试过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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top