是否可以使用正则表达式来检测不是“空字符串”的任何内容,如下所示:
string s1 = "";
string s2 = " ";
string s3 = " ";
string s4 = " ";
等
我知道我可以使用修剪等,但我想使用正则表达式。
感谢。
基督教
答案 0 :(得分:95)
^(?!\s*$).+
将匹配包含至少一个非空格字符的任何字符串。
所以
if (Regex.IsMatch(subjectString, @"^(?!\s*$).+")) {
// Successful match
} else {
// Match attempt failed
}
应该为你做这件事。
^
将搜索锚定在字符串的开头。
(?!\s*$)
,一个所谓的负向前瞻,断言在字符串结尾之前不可能只匹配空白字符。
.+
会实际进行匹配。它将匹配任何内容(换行符除外)直到字符串的结尾。如果您想允许换行,则必须设置RegexOptions.Singleline
选项。
问题的上一版本遗留下来:
^\s*$
匹配仅包含空格(或为空)的字符串。
恰恰相反:
^\S+$
仅匹配仅包含非空白字符的字符串,最少一个字符。
答案 1 :(得分:31)
在.Net 4.0中,您也可以拨打String.IsNullOrWhitespace
。
答案 2 :(得分:3)
你可以做以下两件事之一:
^\s*$
匹配;匹配意味着字符串是“空的”
^
,$
分别是字符串锚点的开头和结尾\s
是一个空格字符*
是\S
;发生意味着字符串不是“空”
\S
是\s
的否定版本(请注意案例差异)\S
匹配任何非空格字符RegexOptions.ECMAScript
,否则\s
会匹配省略号…
答案 3 :(得分:3)
断言不是必需的。 \S
应该自行工作,因为它匹配任何非空格。
答案 4 :(得分:2)
你也可以使用:
public static bool IsWhiteSpace(string s)
{
return s.Trim().Length == 0;
}
答案 5 :(得分:2)
怎么样?
/.*\S.*/
这意味着
/
=分隔符
.*
=除了换行符之外的任何内容都是零或更多
\S
=除了空格(换行符,制表符,空格)之外的任何内容
所以你得到了 匹配任何东西,但换行+不是空格+除了换行之外的任何东西
答案 6 :(得分:0)
我认为[ ]{4}
可能适用于需要检测4个空格的示例。
与其他人相同:[ ]{1}
,[ ]{2}
和[ ]{3}
。如果你想检测一般的空字符串,^[ ]*$
会这样做。
答案 7 :(得分:0)
创建"正则表达式以检测空字符串",然后反转它。 常规语言的推理是常规语言,我认为CLR的正则表达式库应该支持反转,如
grep --invert-match
答案 8 :(得分:0)
我们还可以在char类中使用 space ,其表达式类似于以下之一:
(?!^[ ]*$)^\S+$
(?!^[ ]*$)^\S{1,}$
(?!^[ ]{0,}$)^\S{1,}$
(?!^[ ]{0,1}$)^\S{1,}$
取决于我们可能使用的语言/风味。
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(?!^[ ]*$)^\S+$";
string input = @"
abcd
ABCD1234
#$%^&*()_+={}
abc def
ABC 123
";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。
jex.im可视化正则表达式: