【问题标题】:Regex to parse out html from CDATA with C#正则表达式用 C# 从 CDATA 中解析出 html
【发布时间】:2010-10-23 04:12:33
【问题描述】:

我想解析出以 CDATA 形式返回的所有 HTML 数据。

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

谢谢!

【问题讨论】:

  • 你能说得更具体点吗?您有一个包含 CDATA 部分的 XML 文档,并且想要获取包含该 CDATA 部分内容的字符串?
  • 我在 DataTable 中将它作为结果集中的列之一作为字符串返回,完全按照我上面写的示例,所以我只想做一个正则表达式来获取内容和通过 AJAX 调用将 html 字符串返回到浏览器。

标签: c# regex cdata


【解决方案1】:

处理你的例子的表达式是

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

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

【讨论】:

  • 文本组可能更适合使用 .* 而不是 [^]]* 否则任何带有“]”的 HTML 都会阻止匹配。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    /<!\[CDATA\[(.*?)\]\]>/
    

    【讨论】:

    • 虽然我不认为转义“
    • 在 c# regex 中不需要转义
    【解决方案4】:

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

    (?:<!\[CDATA\[)(.*?)(?:\]\]>)
    

    【讨论】:

      【解决方案5】:
      Regex r = new Regex("(?<=<!\[CDATA\[).*?(?=\]\])");
      

      【讨论】:

      • 已修复!抱歉,不知道那里有效:)
      【解决方案6】:

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

      str = str.Trim().Substring(9);
      str = str.Substring(0, str.Length-3);
      

      【讨论】:

        猜你喜欢
        • 2014-05-16
        • 2011-01-23
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 2014-06-08
        • 2021-07-20
        相关资源
        最近更新 更多