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

时间:2010-06-21 14:33:03

标签: c# regex

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

string s1 = "";
string s2 = " ";
string s3 = "  ";
string s4 = "   ";

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

感谢。

基督教

9 个答案:

答案 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匹配任何非空格字符

参考

相关问题

答案 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,}$

取决于我们可能使用的语言/风味。

RegEx Demo

测试

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);
        }
    }
}

C# Demo


如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。


RegEx电路

jex.im可视化正则表达式:

enter image description here