次の場合を除いて、すべて大文字で必要なテキスト(文字列)があります。
- :(コロン)で始まる単語
- 二重引用符で囲まれた単語または文字列、 ""
- 一重引用符で囲まれた単語または文字列''
それ以外はすべて大文字に置き換え、書式設定(空白、改行など)はそのままにしておく必要があります。
正規表現(C#スタイル/構文)を使用してこれを行うにはどうすればよいですか?
私はあなたがこのようなものを探していると思います:
text = Regex.Replace(text, @":\w+|""[^""]*""|'[^']*'|(.)",
match => match.Groups[1].Success ?
match.Groups[1].Value.ToUpper() : match.Value);
:\w+
-単語をコロンと一致させます。"[^"]*"|'[^']*'
-引用されたテキストと一致します。エスケープされた引用符の場合、次を使用できます。
"[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*'
(.)
-他のものをキャプチャします(試すこともできますが([^"':]*|.)
、より高速になる可能性があります)。
次に、Regex.Replaceのコールバックを使用して、次の2つのことを行います。
実例: http: //ideone.com/ORFU8
この正規表現から始めることができます:
\b(?<![:"'])(\w+?)(?!["'])\b
しかしもちろん、それが十分でない場合は、自分で改善する必要があります。たとえば、これでも「dfgdfg」(引用符が等しくない)は見つかりません。見つかった単語は最初の一致($ 1)にあります。