2017-02-21 1 views
2

"\ r \ n"を改行として使用しないファイルを正規表現で除外したいと思います。たとえば、ファイルに単一の「\ n」または単一の「\ r」が含まれている場合、それは不適格ファイルとしてフィルタリングされます。C#regex:先読みと背後の正規表現を1つにまとめる

new Regex(@"\r(?!\n)").Match(text).Success 

テキスト場合、これは私に言うだろう:

私はすでに見つけた:テキストは、単一の "\ n" は

とされている場合

new Regex(@"(?<!\r)\n").Match(text).Success 

をこれが私に言うだろう"\ r"を1つ持っています

現在、私は次のように書くことができます:

!(new Regex(@"(?<!\r)\n").Match(text).Success) && !(new Regex(@"\r(?!\n)").Match(text).Success) 

しかし、2つを1つにまとめる方法はありますか?

ありがとうございました。

+1

'@"(?<!\ r)\ n | \ r "(?!\ n)" ' –

+0

これは、" \ r \ n "と"\ r"は改行としてtrueを返します。それは偽返される必要があります – strisunshine

+0

誰もそれがダウングレードされた理由を説明できますか?私はそれが意味のある質問だと思った。 – strisunshine

答えて

1

最初のことは、先見の明示的な主張を持つべきではないということです。
これは、テキストの大きさが
であることと、正当な順序がどのくらいの頻度であるかに応じて、最大10倍のペナルティを追加します。

あなたがlookbehindアサーションで始まったら、実際にはすべての文字
を2回、アサーションのために1回、それ以降は何回もテストします。
実際には、最初に後にあるものを探したい場合は、
をドロップして効率を上げます。

これは、交互に組み合わせることができます。 \n(?<!\r\n)|\r(?!\n)

+0

パフォーマンスのおかげでありがとうございました。それは私がこれを使用するように働いた。 – strisunshine

+0

あなたは大歓迎です! – sln