質問

返されるHTMLデータをCDATAでラップして解析したい。

例として<![CDATA[<table><tr><td>Approved</td></tr></table>]]>

ありがとう!

役に立ちましたか?

解決

例を処理する式は

になります
\<\!\[CDATA\[(?<text>[^\]]*)\]\]\>

グループ<!> quot; text <!> quot; 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\[).*?(?=\]\])");

なぜそんな単純なタスクに正規表現を使用したいのですか? これを試してください:

str = str.Trim().Substring(9);
str = str.Substring(0, str.Length-3);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top