2012-02-12 6 views
1

は...私のソースです:HTMLタグとその間のコンテンツをC#で削除するには?</p> <p>後、私は私の元からそれらの間のタグと内容を削除したい

<tr> 
    <td class="ds_label" width="40%" style="font-size: 70%;"></td> 
    <td id="table_cell_1585" class="ds_label"> 
    <a class="tt" href="#" onClick="return false;"> 
     <table class="tooltip" style="width:300px;" cellpadding="0" cellspacing="0" border=0> 
    </a> 
    </td> 
    <td class="ds_data" width="60%" style="font-size: 70%">800 x 480 pixels</td> 
</tr> 

と私はコンテンツと全体<a>タグを削除したいです。

私はこれを使用しました: 応答に私のソースコードが含まれています。

response = Regex.Replace(response, "<a>(.|\n)*?</a>", string.Empty); 

しかし、機能しません。

お知らせください。

+0

どのような情報源を参照していますか? –

+1

http:// stackoverflowの義務的な言及。com/questions/590747/use-regular-expressions-to-parse-html-why-not - RegexはHTMLを解析するのに適したツールではありません。 –

+0

私は1つのリンクをHttpWebRequestに渡して、その応答からHttpWebResponse.Andを取得しています。タグの内容を – user1203653

答えて

2

RegexはHTMLを解析するのには適していません。代わりにHTMLAgilityPackをご覧ください。

+0

の間で削除してもよろしいですか? – user1203653

+1

いいえ、できません。あなたが停止点に達した後で、アセンブリを試して、関連する質問をしてください。あなたはこの方法でもっと学ぶでしょう。 –

0

は、この正規表現を試してみてください:

<a\b[^>]*>(.*?)</a> 

[TestMethod] 
     public void TestMethod1() 
     { 
      var source = 
       @" 
<tr> 
    <td class='ds_label' width='40%' style='font-size: 70%;\'></td> 
    <td id='table_cell_1585' class='ds_label'> 
    <a class='tt' href='#' onClick='return false;'> 
     <table class='tooltip' style='width:300px;' cellpadding='0' cellspacing='0' border=0> 
    </a> 
    </td> 
    <td class='ds_data' width='60%' style='font-size: 70%'>800 x 480 pixels</td> 
</tr>"; 
      source = Regex.Replace(source, "<a [^>]*>", string.Empty); 
      source = Regex.Replace(source, "</a>", string.Empty); 
      Console.Write(source); 
     } 
+0

私はこれを試してみました。 – user1203653

+0

私の正規表現を使用した後、ここに結果を貼り付けることができますか?この回答を編集するか質問を編集してください。または、pastebin.comまたはgist.githubを使用して共同作業を行います。 – Zasz

+0

Hey prob解決済み:-) – user1203653

2
  • まず、HTMLで動作するように正規表現を使用して回避しようと、それは間違っているツールだあまりにも多くのエッジケースが信頼できるものがあるので、または安全です。 HTMLAgilityPackのような構造化文書を処理するために設計されたフレームワークを使用します。

  • あなたがC#で正規表現を定義するリテラル文字列を使用している場合は、それは(@接頭辞)verbatim string literalを使用するので、パターンにcaractersを脱出することをお勧めしますが、文字列リテラルの一部として解釈arn't。この質問の場合、@"<a>(.|\n)*?</a>"は、\nがC#でエスケープ文字として扱われることを停止します。

  • 新ラインはとても<a>ためのオプションでクロージング>

  • 使用RegexOptions.Singlelineのものと一致することはほとんどありませんAタグのhrefなどの属性が含まれて両方\rと-または\n

  • HTMLで構成することができます引数は、改行を含む任意の文字に一致するようにします(.)。


このユニットテストは成功します。

[Test] 
public void Test() 
{ 
    Regex pattern = new Regex(@"<a.*?</a>", RegexOptions.Singleline); 
    string input = "foo <a href=\"//example.com\">\r\nbaz</a> bar"; 
    string expected = "foo bar"; 
    string actual = pattern.Replace(input, string.Empty); 
    Assert.AreEqual(expected, actual); 
} 

しかし、これは、ユーザの入力や、このような正規表現を簡単に回避することができますので、事前に定義されていないあらゆる種類のデータを処理する安全な方法ではないことに注意してください。

1

使用この

可変= Server.HtmlDecode(可変).Trim();

関連する問題