如何匹配除';只有空格';使用.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
感谢
我会使用
^'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()
的结果怎么样?