正規表現:スペース(タブ/スペース)を検索しますが、改行は検索しません


96

スペースやタブはテストするが改行はテストしない正規表現はどうすればよいですか。試し\sましたが、改行もテストすることがわかりました。

私はC#/ WPFを使用していますが、問題はありません。

回答:


189

文字クラスを使用する: [ \t]


1
私の問題を見つけてください。perlのみの文字クラスについては、stackoverflow.com / a / 25956935/292060 も参照してください\h。ただし、ここにリストに追加する必要がある場合に備えて、他の多くの空白文字があることを示しています。
goodeye 2015

3
なぜ前にスペースが必要なの\tですか?
Ooker 2017年

4
@Ookerリテラルスペースをキャプチャするには
codemonkee 2017年

他の回答が述べたように、これは他の種類のスペースとは一致しません。
Gus

1
なぜ\ tの前にスペースがあるのですか?
Catbuilt

35

次の文字セットを試してください:

[ \t]

これはスペースまたはタブレータにのみ一致します。


14

@EiríkrÚtlendiが述べたように、受け入れられたソリューションでは、水平タブ(U + 0009)と改行スペース(U + 0020)の2つの空白文字のみが考慮されます。改行しないスペースなど、他の空白文字は考慮されません(これは、私が処理しようとしているテキストに含まれています)。より完全な空白文字のリストはウィキペディアに含まれており、リンクされたPerlの回答でも参照されています。これらの他の文字を説明する単純なC#ソリューションは、文字クラスの減算を使用して構築できます。

[\s-[\r\n]]

または、EiríkrÚtlendiのソリューションを含めて、

[\s\u3000-[\r\n]]

3

注: CJKテキスト(中国語、日本語、韓国語)を扱うユーザーの場合、これまでに試したどの実装(Perl、.NET、PCRE、Python)にも2バイトのスペース(Unicode \u3000)は含まれていません\s。最初に文字列を正規化する(すべて\u3000をで置き換えるなど\u0020)か、このコードポイントを含む文字セットを、ターゲットにする他の空白などに加えて使用する必要があります[ \t\u3000]

PerlまたはPCREを使用している場合は\h水平空白の省略形を使用できます。これには、特に、半角スペース、全角スペース、タブが含まれているように見えます。詳細については、「空白一致するが改行(Perl)スレッドではない」を参照してください。

ただし、この\h速記は、.NETとC#には実装されていません。


1
いい視点ね。Java \h(Java 8で導入)にはが含まれますが\u3000\sUNICODE_CHARACTER_CLASSモード(Java 7で導入)を設定しない限り含まれません。
アランムーア

0

コードの下のスペースを置き換えたい場合は、C#

Regex.Replace(Line,"\\\s","");

タブ用

Regex.Replace(Line,"\\\s\\\s","");

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