2017-07-26 9 views
2

と非接頭辞/アンエスケープしたテキストを取得します。 基本的には、FとMが接頭辞/脱字されているので、A、B、C、D、E、G、H、I、J、K、Lを渡しません。私は、以下の入力テキストを持っている正規表現

私は限りが期待どおりに動作しますが、ない

([^\\]([A-Z]{1})) 

として得た

: - 何も前に存在しないためAが、無視され(と私はバックスラッシュが、何のためにテストしてい) - 各手紙 -​​の前のスペースは、前のスペースにJと一致し、1つの文字列としてKLと一致する前のスペースと一致しています。

私はパルテシェで他のバリエーションを試しましたが、それではうまくいかなかったのです。

答えて

2

ネゲートされた文字クラス[^\\]は、であり、テキストに一致するパターンを消費し、一致値に追加し、正規表現のインデックスをマッチの最後に進めます。

は非消費するnegative lookbehindを使用します。

(?<!\\)[A-Z] 
^^^^^^^ 

regex demoを参照してください。無駄なパターンではなく、(?<!\\)は、ASCII大文字の前にバックスラッシュがあるかどうかのみをチェックし、存在する場合はエンジンが一致しないことを確認します。 \がある場合、文字は一致します(バックスラッシュは一致値には残ります)。

C#コード:

var results = Regex.Matches(s, @"(?<!\\)[A-Z]") 
     .Cast<Match>() 
     .Select(m => m.Value) 
     .ToList(); 
関連する問題