web-dev-qa-db-ja.com

正規表現を使用して末尾の空白を削除するにはどうすればよいですか?

空の行を削除せずに、コードから末尾の空白とタブを削除したい。

私は試した:

\s+$

そして:

([^\n]*)\s+\r\n

しかし、それらはすべて空行も削除しました。私は推測する \sは、行末文字にも一致します。


更新(2016):

最近では、Sublimeの TrailingSpaces パッケージを使用して、カスタム/ユーザー設定でこのようなコードクリーニングを自動化します:

"trailing_spaces_trim_on_save": true

末尾の空白をハイライトし、保存時に自動的にトリミングします。

57
ellockie

末尾のスペースとタブを削除してみてください:

[ \t]+$
109
qbert220

空白のみの行も保持しながら末尾の空白を削除するには、正規表現で空白以外の文字afterのみを削除する必要があります。そのため、最初に非空白文字を確認する必要があります。これは、空白文字以外の文字が一致に含まれることを意味するため、置換に含める必要があります。

正規表現:([^ \t\r\n])[ \t]+$

交換:\1 または $1、IDEに依存

30
KOVIKO

プラットフォームは指定されていませんが、C#( 。NET )では次のようになります。

正規表現複数行オプション を想定-以下の例ではそれを使用しています):

    [ \t]+(\r?$)

交換

    $1

「\ r?$」の説明については、正規表現オプション、複数行モード(MSDN)を参照してください。

コード例

これにより、すべての行の末尾のスペースと末尾のタブがすべて削除されます。

string inputText = "     Hello, World!  \r\n" +
                   "  Some other line\r\n" +
                   "     The last line  ";
string cleanedUpText = Regex.Replace(inputText,
                                     @"[ \t]+(\r?$)", @"$1",
                                     RegexOptions.Multiline);
10
Peter Mortensen

末尾および先頭の空白を見つける正規表現:

^[ \t]+|[ \t]+$
2
mohanish

Visual Studio 2012以降( 。NET正規表現を使用 )を使用している場合、次の正規表現を使用して、空白行を削除せずに末尾の空白を削除できます。

(?([^\r\n])\s)+(\r?\n)を置換

$1を使用

Enter image description here


一部の説明

かなり複雑な式が必要な理由は、文字クラス\sがスペース、タブ、改行文字と一致するため、\s+は空白のみを含む行のグループと一致するためです。 $終端をこの正規表現に追加しても、空白と改行文字のみを含む行のグループに一致するためです。

(?([^\r\n])\s)式の意味を正確に知りたい場合もあります(私がしたように)。これは Alternation Construct です。これは、キャリッジリターンでもラインフィードでもない場合、空白文字クラスに事実上一致することを意味します。

通常、代替構成体には真と偽の部分があり、

(?( expression ) yes | no )

ただし、この場合、偽の部分は指定されていません。

1
Rob

Javaの場合:



String str = "    hello world  ";

// prints "hello world" 
System.out.println(str.replaceAll("^(\\s+)|(\\s+)$", ""));


0
john smith

次のように単純に使用できます。

var regex = /( )/g;

サンプル: ここをクリック

0
kumaresan_sd

空の置換を持つ[ |\t]+$は機能します。 \s+($)$1置換を使用しても機能します。少なくともVisual Studioコードでは...

0
Charles Goodwin

空白の末尾のスペースを削除するには、これを使用します。

\n|^\s+\n

Atom および Xcode エディターでテストしました。

0
Oskar

空行を無視しながら末尾の空白を削除するには、肯定的な後読みを使用します。

(?<=\S)\s+$

後読みは、非空白(\ S)を一致から除外する方法です。

0
Markus Strauss

正規表現_/^[ \t\v\f]+\S.*$/gm_を使用して、空白行や末尾の空白に触れることなく、各行の先頭の空白を削除できます。

_const str = ' X \n\nY Y\n \n Z'.replace(/^[ \t\v\f]+(\S.*)$/gm, '$1');
console.log(str);
// output: 'X \n\nY Y\n \nZ'_

少し遅いが、より堅牢なサポートが必要な場合は、NBSPとBOMを含むregex /^[ \t\v\f\xA0\uFEFF]+(\S.*)$/gmを使用して、_\s_動作に近づけます。

追加:

これは、より単純で、_\s_動作に準拠しています:/^(?=\s+).+(\S.*)$/gm ...しかし、古いブラウザで動作するかどうかはわかりません。

警告:単純な正規表現に基づくソリューションは、ES6 TL文字列を破損する可能性があります。

0
aMarCruz