2016-11-07 4 views
1

을 사용하여 HTML에서 내부 스타일을 제거하려면 C#을 사용하여 html에서 내부 스타일을 제거하고 싶습니다. 여기 내 HTML 텍스트입니다Regex C#

<span style="font-family: tahoma; color: #9bbb59;">This is a simple text.</span><br /> 
<table> 
    <thead> 
    </thead> 
    <tbody> 
     <tr> 
      <td>&nbsp;R1C1</td> 
      <td>R1C2</td> 
     </tr> 
     <tr> 
      <td>R2C1</td> 
      <td>R2C2</td> 
     </tr> 
    </tbody> 
</table> 
<style type="text/css" id="telerik-reTable-1"> 
    .telerik-reTable-1 { 
    border-width: 0px; 
    border-style: none; 
    border-collapse: collapse; 
    font-family: Tahoma; 
    } 
    .telerik-reTable-1 td.telerik-reTableFooterEvenCol-1 { 
    padding: 0in 5.4pt 0in 5.4pt; 
    text-align: left; 
    border-top: solid gray 1.0pt; 
    } 
</style> 

제거한 뒤 inner css처럼 보이기를 원합니다.

<span style="font-family: tahoma; color: #9bbb59;">This is a simple text.</span><br /> 
<table> 
    <thead> 
    </thead> 
    <tbody> 
     <tr> 
      <td>&nbsp;R1C1</td> 
      <td>R1C2</td> 
     </tr> 
     <tr> 
      <td>R2C1</td> 
      <td>R2C2</td> 
     </tr> 
    </tbody> 
</table> 

이 패턴은 @"<\s*style[^(style>)]*style>"입니다. 하지만 작동하지 않습니다.

참고 : 나는 자식 노드를 제거하기 위해 HtmlDocument를 사용할 수 없다고 생각합니다. 때문에 부모 자식 노드 관계가 유지되지 않습니다. 그래서 나는 CSS를 제거하기 위해 정규 표현식 을 사용하고 싶다.

답변

1

사용이 패턴에 맞게.

<style[^<]*</style\s*> 

설명 :

  • <style 경기 <style 단어.
  • [^<]*<이 아닌 문자와 일치하며이 일치는 <까지 번에 여러 번 발생합니다.
  • </ 정확히 일치하는 </입니다.
  • style\s*> 단어 뒤에 0 개 이상의 공백 문자와 >과 일치합니다.
2

HTML 문서를 구문 분석 할 때는 정규식을 사용하지 마십시오. 이유를 이해하려면이 질문을 확인하십시오.

RegEx match open tags except XHTML self-contained tags

당신은 Html Agility Pack처럼, HTML 파서와 함께 할 것이다. 여기 어떻게 할 수 있습니다. 이 같은 스타일 시트와

 HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(htmlInput); 

     var nodes = doc.DocumentNode.SelectNodes("//style"); 

     foreach (var node in nodes) 
      node.ParentNode.RemoveChild(node); 

     string htmlOutput = doc.DocumentNode.OuterHtml; 
+0

@ corei11이 스타일과 동일한 span 요소를 찾고 스타일 속성을 "" – mybirthname

1

사용 System.Xml.Xsl.XslTransform :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="style" /> 
</xsl:stylesheet>