c#과 함께 cdata에서 html을 구문 분석하기 위해 재가입합니다.

StackOverflow https://stackoverflow.com/questions/812303

  •  03-07-2019
  •  | 
  •  

문제

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 r = new Regex("(?<=<!\[CDATA\[).*?(?=\]\])");

왜 그런 간단한 작업에 Regex를 사용하고 싶습니까? 이거 한번 해봐:

str = str.Trim().Substring(9);
str = str.Substring(0, str.Length-3);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top