I want to match a string when it contains anything but not 'only spaces'.
Spaces are fine, and can be anywhere as long as there is something else.
I can't seem to get a match when a space appears anywhere.
(EDIT: I am looking to do this in regex as I ultimately want to combine it with other regex patterns using | )
Here is my test code:
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();
    }
}
Which gives this output:
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=''
What I want is this:
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
Thanks
I'd use
^\s*\S+.*?$
Breaking down the regex...
^ - start of line\s* - zero or more whitespace characters\S+ - one or more non-whitespace characters.*? - any characters (whitespace or not - non-greedy -> match as few as possible)$ - end of line.No need for a regular expression here. You can use string.IsNullOrWhitespace()
A regular expression is this:
[^ ]
What this does is simple: It checks if your string contains anything that is not a space.
I adjusted your code slightly by adding match.Success to the output:
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));
}
The result will be:
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: Instead of new Regex(r).Match(s) you should use Regex.Match(s, r). This allows the regex engine to cache the pattern.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With