0

この問題を解決するために何時間も努力してきました。正規表現を使用して、ネストされた div を含む div 全体を選択したい場合は、以下の文字列の例を参照してください。

AA <div> Text1 </div> BB <div style=\"vertical-align : middle;\"> Text2 <div>Text 3</div> </div> CC

次の値を返したい

<div> Text1 </div>
<div style=\"vertical-align : middle;\"> Text2 <div>Text 3</div> </div>

私が持っているクローズは次のコードを使用していますが、各DIVを提供するだけです

(?<BeginTag><\s*div.*?>)|(?<EndTag><\s*/\s*div.*?>)

どんな助けでも素晴らしいでしょう。

4

1 に答える 1

1

私のやや皮肉なコメントをさらに詳しく説明すると、正規表現は、あらゆる種類の HTML を解析するための優れたツールではありません。最も単純なシナリオでのみ実現可能であり、その場合でもお勧めしません.

必要なのは、HTML を解析するための優れたツールです。.NET の世界では、これに適したライブラリはHTMLAgilityPackまたはおそらくSGMLReader プロジェクトです。

API の学習に少し時間を費やす必要がありますが、それだけの価値はあります。

あなたが示している小さな断片については、最も簡単な API は SGMLReader になると思います。HTML を XML であるかのように読み取ることができます。つまり、HTML を XDocument に変換して、より優れた API を使用できます。そのためのコードは次のようになります。

string markup = "<html>AA <div> Text1 </div> BB <div style=\"vertical-align : middle;\"> Text2 <div>Text 3</div> </div> CC</html>";
XDocument doc;
using(var reader = Sgml.SgmlReader.Create(new StringReader(markup))) 
    doc = XDocument.Load(reader);

var rootLevelDivs = doc.Root.Elements("div");
foreach(var div in rootLevelDivs)
    Console.WriteLine(div);
于 2013-02-16T16:21:17.147 に答える