除了空字符串之外的任何其他正则表达式

cs0*_*815 44 c# regex

是否可以使用正则表达式来检测不是"空字符串"的任何内容,如下所示:

string s1 = "";
string s2 = " ";
string s3 = "  ";
string s4 = "   ";
Run Code Online (Sandbox Code Playgroud)

等等

我知道我可以使用修剪等,但我想使用正则表达式.

谢谢.

基督教

Tim*_*ker 108

^(?!\s*$).+
Run Code Online (Sandbox Code Playgroud)

将匹配包含至少一个非空格字符的任何字符串.

所以

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

应该为你做这件事.

^ 将搜索锚定在字符串的开头.

(?!\s*$)一个所谓的负向前瞻,断言在字符串结尾之前不可能只匹配空白字符.

.+然后会实际进行比赛.它将匹配任何内容(换行符除外)直到字符串的结尾.如果要允许换行,则必须设置该RegexOptions.Singleline选项.


遗留问题的上一版本:

^\s*$
Run Code Online (Sandbox Code Playgroud)

匹配仅包含空格(或为空)的字符串.

完全相反:

^\S+$
Run Code Online (Sandbox Code Playgroud)

仅匹配仅包含非空白字符的字符串,最少一个字符.

  • 否定将是`\ S`,它将匹配任何非空白字符 (4认同)
  • *仅限空格*或空字符串,+1 (2认同)
  • 以及空字符串.(一个小的区别,但有时是一个重要的区别,但不是在这种情况下,因为csetzkorn想要那个.) (2认同)
  • (?!\s*$) 是负向预测,而不是正向预测 (2认同)

SLa*_*aks 32

在.Net 4.0中,您也可以拨打电话String.IsNullOrWhitespace.

  • 如果你不在.Net 4.0上,你可以使用String.IsNullOrEmpty(variable.Trim())来实现基本相同的东西. (6认同)
  • @Ian:除非它是'null`. (3认同)

Tim*_*nen 7

关于什么?

/.*\S.*/
Run Code Online (Sandbox Code Playgroud)

这意味着

/= 分隔符
.*= 零个或多个除换行符之外的任何内容
\S= 除空格之外的任何内容(换行符、制表符、空格)

所以你会
匹配除换行符之外的任何内容 + 不包含空格的内容 + 除换行符之外的任何内容


rec*_*ive 5

为此不需要断言。 \S应该自己工作,因为它匹配任何非空白。

  • 这是正确的答案!其他许多都过于复杂,因为 a.) 当给出的示例清楚地包括由不同数量的空格组成的字符串时,他们短视地关注 OP 的术语“空字符串”,或者 b.) 他们错过了明确规定的要求OP 需要正则表达式解决方案。 (2认同)