2009-07-28 3 views
0

私はRegExの専門家であることをまったく主張していませんが、私はこの声明が何をしているのか少し混乱しています。私はリファクタリングをしようとしており、これはキープレスで呼び出され、多くのCPUを食べています。このRegEx文は何をしていますか?

Regex.Replace(_textBox.Text, "(?<!\r)\n", Environment.NewLine); 

ありがとうございます。

+1

あなたは、キーを押すたびにドキュメント内のすべての改行を置き換えようとしていますか?もしそうなら、それがあなたのパフォーマンス上の問題の原因です。とにかく、なぜそれをやっていますか? –

+0

本当にRegexを頻繁に使用したい場合は、_compile it_してください。 – Cheeso

+0

私の選択ではありませんでした。置換は静的メソッドです。私はこれを行う前に "if _textBox.Contains(" \ n ")"を追加しました。そして、それはCPUのたわごとの負荷を保存しました –

答えて

8

正規表現(?<!\r)\nは、先に\r文字ではないいずれかの\n文字に一致します。構文(?<!expr)negative look-behind assertionあるとexprは、現在位置の前だ部分と一致していなければならないことを意味します。

1

\ nの前に\ rがなく、Environment.NewLine文字列があるすべてのインスタンスを置き換えます。

+0

@Jared NewLineの文字列は環境に応じて変化するので、 \ n –

+0

@ LFSR、true。私は私の答えを更新します – JaredPar

0

正規表現は、改行文字\nにマッチします。この改行文字の前には、キャリッジリターン文字である\rがプラットフォーム固有のものになります(この文字列はプラットフォーム固有の改行文字です) NewLineキャラクター。

NewLineの文字がある:非Unixプラットフォーム用

  • \r\n
  • \n Unixプラットフォーム
1

のための回答に加えて、正規表現は(せずにすべての\ n個のと一致しないものを説明しますあなたが何らかの形で\ nの入力をしていない限り、Replace()のこの使用法は決して必要ではないと指摘したいと思います。それでも、テキスト全体が使用されているとき(つまり、何らかの形でデータが送信された後)に、キーストップ上にテキストを表示する必要はありません。

コピーペーストされたテキストをサニタイズするためにそこに置かれた場合、大量のテキストが変更されたときにのみリファクタリングすることができます。

関連する問題