正規表現を使用して行が空白かどうかを確認する方法


154

行が空白かどうかをチェックする単純な正規表現を作成しようとしています。

場合;

"    some"   // not blank
"   " //blank
"" // blank

ここで空白はあなたが何を意味するかを意味します。行に空白がいっぱい含まれているか、行に何も含まれていません。何も含まない行と一致させたい場合は、「/ ^ $ /」を使用します
Badri Gs

回答:


329

必要なパターンは、マルチラインモードでは次のようになります。

^\s*$

説明:

  • ^ 文字列アンカーの始まりです。
  • $ 文字列アンカーの終わりです。
  • \s 空白文字クラスです。
  • * ゼロ回以上の繰り返しです。

複数行モードでは、^$も始まり、行の末尾に一致します。

参照:


非正規表現の代替:

また、指定した文字列lineが「空白」(つまり、空白のみが含まれている)trim()かどうかを確認するには、それを-ingし、結果の文字列かどうかを確認しますisEmpty()

Javaでは、これは次のようになります。

if (line.trim().isEmpty()) {
    // line is "blank"
}

次のように、正規表現ソリューションは、アンカーなしで簡略化することもできます(matchesJavaでの定義方法のため)。

if (line.matches("\\s*")) {
    // line is "blank"
}

APIリファレンス


1
@アドナン:マルセロの回答にあるバートのコメントに注意してください。複数の空白行をどのように処理するかに応じて、パターンがわずかに変化する場合があります。
polygenelubricants

さて、Javaからファイルを1行ずつ読み込んでいるので、これで問題ないと思います。
Adnan

1
line.trim:D
Adnan

1
優れたコードが1.6秒から> 1秒に実行されるようになりましたありがとうございます。
Adnan

Pythonの場合:if line.strip(): 空の文字列は次のように評価されるためFalse
John Mark

58

実際には複数行モードでは、より正確な答えは次のとおりです。

/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm

受け入れられた回答:^\s*$最後の行が空白の場合(複数行モード)、シナリオに一致しません。


正確に、私はこれが事実であることを確認しました。受け入れられた回答は私のファイルの多くの空の行を逃しましたが、これはそれらすべてを捕まえました。両方の正規表現の和集合はすべてのケースをキャッチします。
elmor

1
この答えは、Notepad ++などのツールで完全に機能しました。受け入れられた回答は複数の空行と一致しましたが、1つの空行とは一致しませんでした。
ジェームズ2017年

私の場合、承認された回答はSublime Text 3では機能せず、これは機能します。
ヤンシバイ2018

1
受け入れられた回答は、私の場合、複数行で機能しました。これはします。
ロバート・ガブリエル

1
これが最良の答えです。
Q i

12

これを試して:

^\s*$

5
@Adnan、\s改行にも一致することに注意してください。連続する空の行を含む文字列内の空の行を1つ「見つける」ことはありません。
Bart Kiers

6

ほとんどのポータブル正規表現は次のようになり^[ \t\n]*$、空の文字列(あなたが交換する必要があることに注意してくださいと一致するように\tし、\nそれに応じて、タブや改行での)と、[^ \n\t]非空白文字列にマッチします。


私は少なくともクラスでシングルスペースを変更します[ \t]
Bart Kiers

1
Windowsでは\r、正規表現がそうなるように、復帰文字も考慮する必要があります^[ \t\r\n]*$。しかし^\s*$、より良いです-より簡潔です。改行を一致させたくない場合は、次のように使用できます\h(水平空白を意味します)^\h*$
ps.pf

5

この回答のbchr02への全クレジット。ただし、(コメントの終わり)の後に空の行が続く行のシナリオをキャッチするには、少し変更する必要がありました。正規表現は空でない行と一致していました*/*/

新着: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm

^行頭を表す2番目の文字を追加するだけです。


bchr02の回答にコメントして、彼の回答の改善を提案してみませんか?
adamlogan

1
@adamloganええ、記憶から、その時にやりたかったと思いますが、他人の投稿にコメントする評判が足りなかったので、このようにしなければなりませんでした。
ジョンヘンリー

3

ここで空白はあなたが何を意味するかを意味します。
行に空白がいっぱい含まれているか、行に何も含まれていません。
何も含まない行と一致させたい場合は、「/ ^ $ /」を使用します。


-1

まあ...私は(notepadd ++を使って)いじりました、そしてこれは私が見つけた解決策です

\ n \ s

\ n行末(一致を開始する場所)-行の先頭は文字列なので、キャレットは役に立ちません\ s次の文字列までスペースをとります

それが役に立てば幸い


OPは与えられた正規表現の回答を望んでおり、改行文字に関するものではありません。
Moody_Mudskipper 2017

ユーザーが「行が空白かどうかを確認する単純な正規表現」を要求するこの正規表現(regexpal.comでテスト済み)は、まさにそれを行います。なぜそれをテストしないのですか?
M_TRONIC 2017

テストベクトルRを使用しますtest_vec <- c(" some"," ","")。あなたの解決策:grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSE、投票された解決策:grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE。投票されたソリューションは期待される結果を提供しますが、あなたのソリューションはそうではありません。
Moody_Mudskipper 2017

私がメモ帳++でこれを使用したと言ったように、それはうまくいきました。あなたはしませんでした。だから私は同意しないことに同意できると思います!
M_TRONIC 2017

私はあなたが何をしているのか本当にわかりません、あなたctrl+fはメモ帳++でやっていますか?この場合、「拡張」検索モードを選択して「\ n \ s」を検索することで、空白行を見つけることができます(実際には一致しません)。「正規表現」を選択すると、文字列は同じように一致します。 @polygenelubricantsの解決策も試してください。後者は実際にラインと一致し、違いを確認して確認できます。あなたがアドバイスしていることをより明確にするために回答を編集して、読者がより多くの価値を得ることができるようにすることをお勧めしますそれ。
Moody_Mudskipper
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.