如何匹配除';只有空格';使用.Net Regex

本文关键字:使用 Net Regex 空格 何匹配 | 更新日期: 2023-09-27 17:58:52

当字符串包含任何内容而不是"仅空格"时,我想匹配它。

空间很好,只要有其他东西,就可以在任何地方。

当空格出现在任何地方时,我似乎都找不到匹配项。

(编辑:我希望在regex中做到这一点,因为我最终希望使用|将其与其他regex模式相结合)

这是我的测试代码:

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

感谢

如何匹配除';只有空格';使用.Net Regex

我会使用

^'s*'S+.*?$

正在分解正则表达式。。。

  • ^-线路起点
  • 's*-零个或多个空白字符
  • 'S+-一个或多个非空白字符
  • .*?-任何字符(空白或非空白-非贪婪->尽可能少地匹配)
  • $—线路末端

这里不需要正则表达式。您可以使用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

BTW:你应该使用Regex.Match(s, r)而不是new Regex(r).Match(s)。这允许正则表达式引擎缓存模式。

使用^'s+$并简单地否定Match()的结果怎么样?