1

これにはいくつか問題があります。

カスタム ファイルの基本的な構文の強調表示を実行しようとしています。要素がタグ内にあるかどうかを知る必要があります。

いくつかのサンプルデータ

<span class="class1"> 
    Some Text <span class="class2">Some More Text</span>
    TEST
    <span>Text</span>
</span>
TEST

ここでやりたいことは、span タグにネストされていない TEST の出現を見つけることです。

最初のタグは 内class1にネストされているため、一致しないはずです。2 番目のタグは、どのスパン タグにもネストされていないため、一致する必要があります。

最初のテストでは、span タグにネストされていることが示され、2 番目のテストではネストされていないことが示されます。

正規表現がhtmlの解析に使用されることを意図していないことは知っていますが、私の小さな状況では、探していることを行う別の方法がわからないため、正規表現を使用するのが最も簡単だと思いました。この問題を迅速に解決できるのであれば、XPath の使用に反対しているわけではありません。

私のコードでは、このようなメソッドだけが必要です

bool InsideSpanTag(string source, int index);

index が文字列ソースのいくつかの span タグの間にある場合、これは true を返し、そうでない場合は false を返します。

編集: 気にしないでください。インデックスの左側にある開始スパン タグと終了スパン タグを数えて、開始スパン タグの数が終了タグよりも多いかどうかを確認します。ちょっと速くて汚いですが、それは本当に私が必要としていたすべてです.

4

1 に答える 1

5

正規表現は、HTML ファイルの解析には適していません。

HTML は厳密ではなく、その形式も規則的ではありません ( を除くxhtml) 。

htmlagilitypackを使用する

これがあなたのコードです

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

bool valid= doc.DocumentNode
               .SelectNodes("//text()[not(parent::span)]")//this xpath selects all nodes whose parent is not span
               .Any(p => p.InnerText.Contains("TEXT"));
于 2013-06-27T17:42:17.477 に答える