1

小さな問題があります。HTML要素の外にあるテキストを取得しようとしています。入力例:

I want this text I want this text I want this text <I don't want this text/>
I want this text I wan this text <I don't>want this</text>

正規表現でそれがどのように可能か知っている人はいますか? 要素テキストを消せば作れると思いました。では、この問題の別の解決策を知っている人はいますか? 私を助けてください。

4

3 に答える 3

3

一般に HTML (特に不正な形式の HTML)の解析に適していない正規表現の代わりに、 HTML Agility Packのような HTML パーサーを使用します。

Html Agility Pack (HAP) とは正確には何ですか?

これは、読み取り/書き込み DOM を構築し、プレーンな XPATH または XSLT をサポートするアジャイル HTML パーサーです (実際には、使用するために XPATH や XSLT を理解する必要はありません。心配はいりません...)。これは、「Web から」HTML ファイルを解析できる .NET コード ライブラリです。パーサーは、「実際の」不正な HTML に対して非常に寛容です。オブジェクト モデルは、System.Xml を提案するものと非常に似ていますが、HTML ドキュメント (またはストリーム) 用です。

于 2012-06-01T12:43:29.467 に答える
1

これを試して

(?<!<.*?)([^<>]+)

説明

@"
(?<!        # Assert that it is impossible to match the regex below with the match ending at this position (negative lookbehind)
   <           # Match the character “&lt;” literally
   .           # Match any single character that is not a line break character
      *?          # Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
)
(           # Match the regular expression below and capture its match into backreference number 1
   [^<>]       # Match a single character NOT present in the list “&lt;>”
      +           # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
)
"
于 2012-06-01T12:42:23.273 に答える
1

HTML パーサー (.NET を使用する場合はアジリティ パックが優れています) を使用して、簡単ではないことを行う必要があることに同意します。繰り返しになりますが、HTML パーサーは、HTML が持つ特異なケースや特殊なケースについて詳しく知っています。正規表現を使用する前に、十分にテストしてください。

どうぞ

<.*?>.*?<.*?>|<.*?/>

また、正しく無視します

<I don't>want this</text>

タグだけでなく

C# では、これは次のようになります。

string resultString = null;
resultString = Regex.Replace(subjectString, "<.*?>.*?<.*?>|<.*?/>", "");
于 2012-06-01T12:54:49.563 に答える