regular expression for anything but an empty string

前端 未结 9 914
予麋鹿
予麋鹿 2020-11-29 01:22

Is it possible to use a regular expression to detect anything that is NOT an \"empty string\" like this:

string s1 = \"\";
string s2 = \" \";
string s3 = \"          


        
相关标签:
9条回答
  • 2020-11-29 01:48

    Assertions are not necessary for this. \S should work by itself as it matches any non-whitespace.

    0 讨论(0)
  • 2020-11-29 01:48

    I think [ ]{4} might work in the example where you need to detect 4 spaces. Same with the rest: [ ]{1}, [ ]{2} and [ ]{3}. If you want to detect an empty string in general, ^[ ]*$ will do.

    0 讨论(0)
  • 2020-11-29 01:51

    Create "regular expression to detect empty string", and then inverse it. Invesion of regular language is the regular language. I think regular expression library in what you leverage - should support it, but if not you always can write your own library.

    grep --invert-match

    0 讨论(0)
  • 2020-11-29 01:54

    We can also use space in a char class, in an expression similar to one of these:

    (?!^[ ]*$)^\S+$
    (?!^[ ]*$)^\S{1,}$
    (?!^[ ]{0,}$)^\S{1,}$
    (?!^[ ]{0,1}$)^\S{1,}$
    

    depending on the language/flavor that we might use.

    RegEx Demo

    Test

    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


    If you wish to simplify/modify/explore the expression, it's been explained on the top right panel of regex101.com. If you'd like, you can also watch in this link, how it would match against some sample inputs.


    RegEx Circuit

    jex.im visualizes regular expressions:

    0 讨论(0)
  • 2020-11-29 01:56

    You could also use:

    public static bool IsWhiteSpace(string s) 
    {
        return s.Trim().Length == 0;
    }
    
    0 讨论(0)
  • 2020-11-29 01:56

    What about?

    /.*\S.*/
    

    This means

    / = delimiter
    .* = zero or more of anything but newline
    \S = anything except a whitespace (newline, tab, space)

    so you get
    match anything but newline + something not whitespace + anything but newline

    0 讨论(0)
提交回复
热议问题