回答:
必要なパターンは、マルチラインモードでは次のようになります。
^\s*$
説明:
^
文字列アンカーの始まりです。$
文字列アンカーの終わりです。\s
空白文字クラスです。*
ゼロ回以上の繰り返しです。複数行モードでは、^
と$
も始まり、行の末尾に一致します。
また、指定した文字列line
が「空白」(つまり、空白のみが含まれている)trim()
かどうかを確認するには、それを-ingし、結果の文字列かどうかを確認しますisEmpty()
。
Javaでは、これは次のようになります。
if (line.trim().isEmpty()) {
// line is "blank"
}
次のように、正規表現ソリューションは、アンカーなしで簡略化することもできます(matches
Javaでの定義方法のため)。
if (line.matches("\\s*")) {
// line is "blank"
}
String String.trim()
boolean String.isEmpty()
true
の場合、および場合のみ、length()
です0
。boolean String.matches(String regex)
if line.strip():
空の文字列は次のように評価されるためFalse
実際には複数行モードでは、より正確な答えは次のとおりです。
/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
受け入れられた回答:^\s*$
最後の行が空白の場合(複数行モード)、シナリオに一致しません。
ほとんどのポータブル正規表現は次のようになり^[ \t\n]*$
、空の文字列(あなたが交換する必要があることに注意してくださいと一致するように\t
し、\n
それに応じて、タブや改行での)と、[^ \n\t]
非空白文字列にマッチします。
[ \t]
\r
、正規表現がそうなるように、復帰文字も考慮する必要があります^[ \t\r\n]*$
。しかし^\s*$
、より良いです-より簡潔です。改行を一致させたくない場合は、次のように使用できます\h
(水平空白を意味します)^\h*$
この回答のbchr02への全クレジット。ただし、(コメントの終わり)の後に空の行が続く行のシナリオをキャッチするには、少し変更する必要がありました。正規表現は空でない行と一致していました*/
*/
。
新着: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm
^
行頭を表す2番目の文字を追加するだけです。
まあ...私は(notepadd ++を使って)いじりました、そしてこれは私が見つけた解決策です
\ n \ s
\ n行末(一致を開始する場所)-行の先頭は文字列なので、キャレットは役に立ちません\ s次の文字列までスペースをとります
それが役に立てば幸い
test_vec <- c(" some"," ","")
。あなたの解決策:grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSE
、投票された解決策:grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE
。投票されたソリューションは期待される結果を提供しますが、あなたのソリューションはそうではありません。
ctrl+f
はメモ帳++でやっていますか?この場合、「拡張」検索モードを選択して「\ n \ s」を検索することで、空白行を見つけることができます(実際には一致しません)。「正規表現」を選択すると、文字列は同じように一致します。 @polygenelubricantsの解決策も試してください。後者は実際にラインと一致し、違いを確認して確認できます。あなたがアドバイスしていることをより明確にするために回答を編集して、読者がより多くの価値を得ることができるようにすることをお勧めしますそれ。