簡體   English   中英

正則表達式用C#解析CDATA的HTML

[英]Regex to parse out html from CDATA with C#

我想解析包含在CDATA中的任何HTML數據。

例如<![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

“輸入”變量就在那里,只是為了使用您提供的示例輸入

我知道這看起來非常簡單,但是你嘗試過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用於這么簡單的任務? 試試這個:

str = str.Trim().Substring(9);
str = str.Substring(0, str.Length-3);
Regex r = new Regex("(?<=<!\[CDATA\[).*?(?=\]\])");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM