C# Regex for Parsing Known texts
A user wanted to parse basic text. Here is a regex pattern which breaks out the user text.
string @pattern = @" (?:OS\s) # Match but don't capture (MDC) OS, used an an anchor (?<Version>\d\.\d+) # Version of OS (?:;) # MDC ; (?<Phone>[^;]+) # Get phone name up to ; (?:;) # MDC ; (?<Type>[^;]+) # Get phone type up to ; (?:;) # MDC ; (?<Major>\d\.\d+) # Major version (?:;) (?<Minor>\d+) # Minor Version "; string data = @"Windows Phone Search (Windows Phone OS 7.10;Acer;Allegro;7.10;8860) Windows Phone Search (Windows Phone OS 7.10;HTC;7 Mozart T8698;7.10;7713) Windows Phone Search (Windows Phone OS 7.10;HTC;Radar C110e;7.10;7720)"; // Ignore pattern white space allows us to comment the pattern, it is not a regex processing command var phones = Regex.Matches(data, pattern, RegexOptions.IgnorePatternWhitespace) .OfType<Match>() .Select (mt => new { Name = mt.Groups["Phone"].Value.ToString(), Type = mt.Groups["Type"].Value.ToString(), Version = string.Format( "{0}.{1}", mt.Groups["Major"].Value.ToString(), mt.Groups["Minor"].Value.ToString()) } ); Console.WriteLine ("Phones Supported are:"); phones.Select(ph => string.Format("{0} of type {1} version ({2})", ph.Name, ph.Type, ph.Version)) .ToList() .ForEach(Console.WriteLine); /* Output Phones Supported are: Acer of type Allegro version (7.10.8860) HTC of type 7 Mozart T8698 version (7.10.7713) HTC of type Radar C110e version (7.10.7720) */