1. ホーム
  2. c#

[解決済み] 空文字列以外を表す正規表現

2022-02-18 11:51:30

質問

正規表現を使用して、次のような「空文字列でないもの」を検出することは可能ですか?

string s1 = "";
string s2 = " ";
string s3 = "  ";
string s4 = "   ";

などです。

trimなどを使えばいいのは分かっているのですが、正規表現を使いたいのです。

どのように解決するのですか?

^(?!\s*$).+

は、少なくとも1つの非空白文字を含む文字列にマッチします。

そこで

if (Regex.IsMatch(subjectString, @"^(?!\s*$).+")) {
    // Successful match
} else {
    // Match attempt failed
}

がこれをやってくれるはずです。

^ は、検索を文字列の先頭に固定する。

(?!\s*$) は、いわゆる負のルックヘッドで、文字列の終わりまで空白文字だけをマッチさせることは不可能であると主張します。

.+ は、実際にマッチングを行います。これは、文字列の終わりまでなら(改行を除いて)何でもマッチします。改行を許可したい場合は、文字列の最後に RegexOptions.Singleline オプションで指定します。


前のバージョンのご質問の残りです。

^\s*$

は、空白だけを含む (あるいは空の) 文字列にマッチします。

正反対です。

^\S+$

は、非空白文字のみからなる文字列にのみマッチし、最小で1文字です。