空の行を削除せずに、コードから末尾の空白とタブを削除したい。
私は試した:
\s+$
そして:
([^\n]*)\s+\r\n
しかし、それらはすべて空行も削除しました。私は推測する \s
は、行末文字にも一致します。
更新(2016):
最近では、Sublimeの TrailingSpaces パッケージを使用して、カスタム/ユーザー設定でこのようなコードクリーニングを自動化します:
"trailing_spaces_trim_on_save": true
末尾の空白をハイライトし、保存時に自動的にトリミングします。
末尾のスペースとタブを削除してみてください:
[ \t]+$
空白のみの行も保持しながら末尾の空白を削除するには、正規表現で空白以外の文字afterのみを削除する必要があります。そのため、最初に非空白文字を確認する必要があります。これは、空白文字以外の文字が一致に含まれることを意味するため、置換に含める必要があります。
正規表現:([^ \t\r\n])[ \t]+$
交換:\1
または $1
、IDEに依存
プラットフォームは指定されていませんが、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);
末尾および先頭の空白を見つける正規表現:
^[ \t]+|[ \t]+$
Visual Studio 2012以降( 。NET正規表現を使用 )を使用している場合、次の正規表現を使用して、空白行を削除せずに末尾の空白を削除できます。
(?([^\r\n])\s)+(\r?\n)
を置換
$1
を使用
一部の説明
かなり複雑な式が必要な理由は、文字クラス\s
がスペース、タブ、改行文字と一致するため、\s+
は空白のみを含む行のグループと一致するためです。 $
終端をこの正規表現に追加しても、空白と改行文字のみを含む行のグループに一致するためです。
(?([^\r\n])\s)
式の意味を正確に知りたい場合もあります(私がしたように)。これは Alternation Construct です。これは、キャリッジリターンでもラインフィードでもない場合、空白文字クラスに事実上一致することを意味します。
通常、代替構成体には真と偽の部分があり、
(?( expression ) yes | no )
ただし、この場合、偽の部分は指定されていません。
Javaの場合:
String str = " hello world ";
// prints "hello world"
System.out.println(str.replaceAll("^(\\s+)|(\\s+)$", ""));
空の置換を持つ[ |\t]+$
は機能します。 \s+($)
は$1
置換を使用しても機能します。少なくともVisual Studioコードでは...
空行を無視しながら末尾の空白を削除するには、肯定的な後読みを使用します。
(?<=\S)\s+$
後読みは、非空白(\ S)を一致から除外する方法です。
正規表現_/^[ \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文字列を破損する可能性があります。