2つ以上の空白に一致するが、改行には一致しない正規表現


87

文字列内の2つ以上の空白をすべて置き換えたいのですが、新しい行は置き換えません。この正規表現があります。\s{2,}ただし、新しい行にも一致しています。

新しい行ではなく、2つ以上の空白のみを一致させるにはどうすればよいですか?

私はc#を使用しています


@ nihcap-実際、C#には独自の正規表現フレーバーがなく、.Net共通ライブラリの一部です。この場合、.NetとC#はどちらも便利なタグです。
コビ2011

回答:


159

一致させたい空白文字を文字クラス内に配置します。例えば:

[ \t]{2,}

2つ以上のスペースまたはタブに一致します。

次のこともできます。

[^\S\r\n]{2,}

これ以外の任意の空白文字と一致する\r\n(資本ことに注意してください二回、少なくともSでは、\Sの略です[^\s])。


最後の文の「略」とはどういう意味ですか?この省略形がないと、正規表現全体はどのようになりますか?
ロニーベスト

5
正規表現の@LonnieBestでは、\ wなどのエスケープシーケンスの場合、大文字のエスケープシーケンスは小文字のエスケープシーケンスの逆文字セットであることがよくあります。たとえば、\ dは\ Dの逆、\ sは\ Sの逆、\ wは\ Wの逆などです。また、[abc]などの[]で区切られた文字クラスセット内で、を指定することができます。 [^ abc]を使用して逆にします。したがって、\ Sは[^ \ s]と同等であり、許可されている場合は、許可されていない表記[^^ \ S]とも同等です。(^^は、逆の逆を表す有効な方法ではありません。)
Dejay Clayton 2016

@DejayClaytonありがとう、私はそれを知りませんでした。
ロニーベスト

この答えはうまく\s{2,}いきましたが、なぜそれを進める改行をつかむのですか?もしそうなら、\n\s{2,}私は理解するでしょう。そして、なぜ括弧内にリテラルスペースを入力することが機能するのですか?
ビットレス

「この答えはうまくいきましたが、なぜ\ s {2、}はそれを進める改行をつかむのですか?」\sスペース、タブ、改行に一致するためです。「そして、なぜ括弧内にリテラルスペースを入力することが機能するのですか?」、まあ、それは機能するからです。それについて他に何を言うべきかわからない:)
Bart Kiers

0

2つのスペースのみを対象とする正規表現:[] {2、}正規表現の括弧は文字クラスです。そこにある文字だけを意味します。ここはただのスペースです。次の中括弧は2回以上を意味します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.