4

「スペースのみ」ではなく、何かが含まれている場合に文字列を一致させたい。

スペースは問題なく、他に何かがある限りどこでもかまいません。

スペースがどこかにあると一致しないようです。

(編集:最終的に | を使用して他の正規表現パターンと組み合わせたいので、これを正規表現で実行しようとしています)

ここに私のテストコードがあります:

class Program
{
    static void Main(string[] args)
    {
        List<string> strings = new List<string>() { "123", "1 3", "12 ", "1  " , "  3", "   "};

        string r = "^[^ ]{3}$";
        foreach (string s in strings)
        {
            Match match = new Regex(r).Match(s);
            Console.WriteLine(string.Format("string='{0}', regex='{1}', match='{2}'", s, r, match.Value));
        }
        Console.Read();
    }
}

次の出力が得られます。

string='123', regex='^[^ ]{3}$', match='123'
string='1 3', regex='^[^ ]{3}$', match=''
string='12 ', regex='^[^ ]{3}$', match=''
string='1  ', regex='^[^ ]{3}$', match=''
string='  3', regex='^[^ ]{3}$', match=''
string='   ', regex='^[^ ]{3}$', match=''

私が欲しいのはこれです:

string='123', regex='^[^ ]{3}$', match='123' << VALID
string='1 3', regex='^[^ ]{3}$', match='1 3' << VALID
string='12 ', regex='^[^ ]{3}$', match='12 ' << VALID
string='1  ', regex='^[^ ]{3}$', match='1  ' << VALID
string='  3', regex='^[^ ]{3}$', match='  3' << VALID
string='   ', regex='^[^ ]{3}$', match=''    << NOT VALID

ありがとう

4

3 に答える 3

7

私は使うだろう

^\s*\S+.*?$

正規表現を分解しています...

  • ^- 行頭
  • \s*- ゼロ個以上の空白文字
  • \S+- 1 つ以上の非空白文字
  • .*?- 任意の文字 (空白かどうか - 非貪欲 -> 可能な限り一致しない)
  • $- 行の終わり。
于 2013-02-12T14:04:18.647 に答える
6

ここでは正規表現は必要ありません。使用できますstring.IsNullOrWhitespace()

正規表現は次のとおりです。

[^ ]

これが行うことは簡単です。文字列にスペース以外のものが含まれているかどうかをチェックします。

match.Success出力に追加して、コードを少し調整しました。

var strings = new List<string> { "123", "1 3", "12 ", "1  " , "  3", "   ", "" };

string r = "[^ ]";
foreach (string s in strings)
{
    Match match = new Regex(r).Match(s);
    Console.WriteLine(string.Format("string='{0}', regex='{1}', match='{2}', " +
                                    "is match={3}", s, r, match.Value,
                                    match.Success));
}

結果は次のようになります。

string='123', regex='[^ ]', match='1', is match=True
string='1 3', regex='[^ ]', match='1', is match=True
string='12 ', regex='[^ ]', match='1', is match=True
string='1  ', regex='[^ ]', match='1', is match=True
string='  3', regex='[^ ]', match='3', is match=True
string='   ', regex='[^ ]', match='', is match=False
string='', regex='[^ ]', match='', is match=False

ところで:代わりにnew Regex(r).Match(s)を使用する必要がありますRegex.Match(s, r)。これにより、正規表現エンジンはパターンをキャッシュできます。

于 2013-02-12T13:47:46.900 に答える
0

の結果を使用^\s+$して単純に否定するのはMatch()どうですか?

于 2013-02-12T13:48:11.277 に答える