string s = "1 2 3 4"; string[] elements = s.Split(new char[] { ' ' }, StringSplitOptions.None);When you traverse the result, each empty string in the array represents an extra space char in the original string
internal static void Go() { string[] lines = { @"drw-rw-rw- 1 user group 0 Feb 6 15:46 .", @"drw-rw-rw- 1 user group 0 Feb 6 15:46 ..", @"-rw-rw-rw- 1 user group 4825 May 3 2010 Account.png", @"-rw-rw-rw- 1 user group 5242 May 3 2010 Administration.png", @"-rw-rw-rw- 1 user group 4117 Apr 17 2011 Agent.png", @"-rw-rw-rw- 1 user group 1402 Dec 30 2005 AmazonCA.gif", @"-rw-rw-r-- 1 wliclus weblogic 308121 Jun 1 2011 tlv_01_jackk_2011615315_1185655_001_23327701.zip", @"-r-xr-xr-x 1 owner group 78145990 Nov 4 2011 101.zip", @"-r-xr-xr-x 1 owner group 35492 Apr 14 2011 20110414.40E", @"-r-xr-xr-x 1 owner group 33583 Apr 14 2011 20110414.421", @"-r-xr-xr-x 1 owner group 40815 Apr 14 2011 20110414.483", @"-r-xr-xr-x 1 owner group 24836 Apr 14 2011 20110414.ARC", @"-r-xr-xr-x 1 owner group 4737 May 5 2011 4A16PBE1.txt", @"-r-xr-xr-x 1 owner group 4737 Jan 18 13:50 4A17A7B1 aa bbb cccccc.txt" }; string pattern = @"^(?<Permissions>\S+)\s+(?<Links>\d+)\s+(?<User>\w+)\s+(?<Group>\w+)\s+(?<FileSize>\d+)\s+(?<Month>\w+)\s+(?<Day>\d+)\s+((?<Year>\d{4})|(?<Time>\d+:\d+(:\d+)?))\s+(?<FileName>.+)$"; foreach (string line in lines) { Match m = Regex.Match(line, pattern); if (m.Success) { Console.WriteLine("Month {0}", m.Groups["Month"]); Console.WriteLine("Day {0}", m.Groups["Day"]); Console.WriteLine("Year {0}", m.Groups["Year"]); Console.WriteLine("Time {0}", m.Groups["Time"]); Console.WriteLine("Size {0}", m.Groups["FileSize"]); Console.WriteLine("FileName {0}", m.Groups["FileName"]); } else Console.WriteLine("No match"); } Console.ReadLine(); }