fork download
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text.RegularExpressions;
  7.  
  8. public class Test
  9. {
  10. public static void Main()
  11. {
  12. var rx = @"(?<term>\w+(?:\s+\w+)*)(?:\s+(?<key>\w+)=""(?<value>[^""]*)"")+";
  13. var s = "John Hennesey POLICY_NUMBER=\"POL-1-2345-6-780\" EXPIRATION_DATE=\"2017-01-01T00:00:00\" business_name=\"Hennesey Hen Houses\" PREMIUM=\"between 100 and 400\" Mike Ramsey POLICY_NUMBER=\"POL-2-2346-8-080\" EXPIRATION_DATE=\"2017-02-08T01:04:50\" business_name=\"Mike Ramsey Igloos\" PREMIUM=\"between 200 and 500\"";
  14. var ms = Regex.Matches(s, rx);
  15. foreach (Match m in ms)
  16. {
  17. var term = m.Groups["term"].Value;
  18. Dictionary<string, string> dct = m.Groups["key"].Captures
  19. .Cast<Capture>()
  20. .Select(x=>x.Value)
  21. .ToList()
  22. .Zip(
  23. m.Groups["value"].Captures.Cast<Capture>().Select(x=>x.Value).ToList(),
  24. (k, v) => new { k, v }
  25. )
  26. .ToDictionary(x => x.k, x => x.v);
  27. Console.WriteLine("---- NEXT MATCH ----\nTerm: {0}", term);
  28. foreach (var kvp in dct)
  29. {
  30. Console.WriteLine("KVP: {0}:{1}", kvp.Key, kvp.Value);
  31. }
  32. }
  33. }
  34. }
Success #stdin #stdout 0.09s 20784KB
stdin
Standard input is empty
stdout
---- NEXT MATCH ----
Term: John Hennesey
KVP: POLICY_NUMBER:POL-1-2345-6-780
KVP: EXPIRATION_DATE:2017-01-01T00:00:00
KVP: business_name:Hennesey Hen Houses
KVP: PREMIUM:between 100 and 400
---- NEXT MATCH ----
Term: Mike Ramsey
KVP: POLICY_NUMBER:POL-2-2346-8-080
KVP: EXPIRATION_DATE:2017-02-08T01:04:50
KVP: business_name:Mike Ramsey Igloos
KVP: PREMIUM:between 200 and 500