1

定義されたタグのペアの間のテキストのみで構成される文字列と、タグを含むテキストで構成される文字列を取得する必要があります。テキストは HTML<p>タグ内にあるため、<>&lt;はandのように解釈さ&gt;れます (私の知る限り、HTML Agility Pack のようなパーサーを使用することは不可能です)。

したがって、入力文字列は次のようになります。

Text outside of tags
&lt;internal&gt;    First occurance of text inside of tags    &lt;/internal&gt;
More text outside of tags
&lt;internal&gt;    Second occurance     &lt;/internal&gt;

現在、次のコードを使用していますが、最初の出現のみを取得し、2 番目の出現は取得しません。

Regex regex = new Regex(@"(&lt;internal&gt;(.*?)&lt;/internal&gt;)", RegexOptions.Singleline);
MatchCollection matches = regex.Matches(inputString);

foreach (Match match in matches)
{
    string outerMatch = match.Groups[1].Value;
    string innerMatch = match.Groups[2].Value;
}
4

3 に答える 3

1

ああ、コードは実際に動作します。2 番目の出現を検出しなかった理由は、挿入されたドキュメントを作成しているエディターと、タグ内のテキストのタグが場合によっては正規表現が一致しなかったためです。正規表現を次のように変更しました。

Regex regex = new Regex(@"(&lt;.*?internal.*?&gt;(.*?)&lt;.*?/.*?internal.*?&gt;)", RegexOptions.Singleline);

とにかくありがとう!

于 2012-07-06T10:54:02.987 に答える
1

またこんな質問。

タグの識別に正規表現を使用しないでください。正規表現はステートレスで、HTML や XML では正しく動作しません。これにはパーサーを使用する必要があります。

HTML 解析にアジリティ パックを使用します。

于 2012-07-06T08:59:17.703 に答える
-1

\<およびの\>代わりに&lt;&gt;

このような:

(\<internal\>(.*?)\</internal\>)
于 2012-07-06T09:05:04.677 に答える