1

タグ内にないテキストを見つけて置換しようとしています。

タグはシンプルで、次のパターンに従います。

(<[A-Z_]+>)([^<]+)(</[A-Z_]+>)
  • グループ 1: 開始タグ
  • グループ 2: タグの内容
  • グループ 3: 終了タグ

確認する必要があるテキストは次のようなものです (テキスト アイテムごとに 1 行で、各行に複数のタグが含まれている可能性があります)。

What movie did The programmer watch if he didn't watch <NAME>The Office</NAME>?

「プログラマー」の前に「The」を一致させる必要がありますが、 < NAME > タグ内の「The」ではありません。私はそれを次のように変更しようとしています:

What movie did the programmer watch if he didn't watch <NAME>The Office</NAME>?

別の例として、おそらくより良い:

What movie did The programmer watch if he didn't watch <NAME>Dawn of the Dead - The Original Director's Cut</NAME>?

基本的に、タグの外側にあるテキストの大文字と小文字の問題を修正しようとしています。タグ内のテキストにはまったく触れたくありません。別の例を次に示します。

Why Don't You watch <NAME>This is Spinal Tap</NAME> on <DAY>Friday</DAY> or whenever?

そこで、私は見つけたい:

  • しないでください
  • 君は

しかし、「Spinal」などではなく、最終的には次のようになります。

Why don't you watch <NAME>This is Spinal Tap</NAME> on <DAY>Friday</DAY> or whenever?

確認する必要があるすべての文字列は、タグ付きテキストが文字列内の任意の場所に配置された文です。タグが重なっていないか、別のタグが含まれていません。

どんな助けでも大歓迎です。実行する正しいパスへのリンクまたはポインターであっても。

前もって感謝します!

4

2 に答える 2

1

あなたの解決策は次のとおりです。

Regex.Replace(s, @"((?<!^)\b[A-Z])(?=[^<>]+<[^\/>][^>]+>)", m => m.Value.ToLower());

このデモを確認してください。

于 2012-09-07T15:41:28.500 に答える
-1

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

((?<!^|\.\s*)\b[A-Z])(?![^<>]+(?:<\/[^>]+)?>)

ここRegexheroでテストしてください

これにより、同じ行の新しい文の最初の大文字の単語と一致しないことが保証されます。
たとえば、TheinThe movies was Not that greatは一致しません。

プログラマーが The Office を見ていない場合、どの映画を見ましたか?. 映画はそれほど素晴らしいものではありませんでした。

于 2012-09-07T17:09:22.023 に答える