using System;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string addressToParse = String.Empty;
Console.WriteLine("Sample RegEx application to parse combinations of City, State, and Zip Code.");
Console.WriteLine();
Console.Write("Enter address or <Enter> to Quit: ");
while (true)
{
addressToParse = Console.ReadLine();
if (addressToParse.Length > 0)
{
ParseAddressSegments(addressToParse);
Console.WriteLine();
Console.Write("Enter address or <Enter> to Quit: ");
}
else
{
break;
}
}
}
private static void ParseAddressSegments(string addressToParse)
{
StringBuilder pattern = new StringBuilder();
pattern.Append(@"#Parse address line into named groups (City, State, Zip)" + Environment.NewLine);
pattern.Append(@"^ #Begining of string" + Environment.NewLine);
pattern.Append(@"( #Start OR condition" + Environment.NewLine);
pattern.Append(@"( #Begin first condition (City, State, Zip)" + Environment.NewLine);
pattern.Append(@"(?<City>[A-Za-z\.\-\s]+) #City" + Environment.NewLine);
pattern.Append(@"( (?:,\s?) | (?:\s?) )\b #Comma, comma space, or space" + Environment.NewLine);
pattern.Append(@"(?<State>[A-Za-z]{2}) #State" + Environment.NewLine);
pattern.Append(@"(?:\s?) #Space" + Environment.NewLine);
pattern.Append(@"(?<Zip>\d{5}(-\d{4})?) #Zip" + Environment.NewLine);
pattern.Append(@") | #End first condition" + Environment.NewLine);
pattern.Append(@"( #Begin second condition (City, State)" + Environment.NewLine);
pattern.Append(@"(?<City>[A-Za-z\s]+) #City" + Environment.NewLine);
pattern.Append(@"( (?:,\s?) | (?:\s?) )\b #Comma, comma space, or space" + Environment.NewLine);
pattern.Append(@"(?<State>[A-Za-z]{2}) #State" + Environment.NewLine);
pattern.Append(@"(?:\s?) #Space" + Environment.NewLine);
pattern.Append(@") | #End second condition" + Environment.NewLine);
pattern.Append(@"( #Begin third condition (Zip)" + Environment.NewLine);
pattern.Append(@"(?<Zip>\d{5}(-\d{4})?) #Zip" + Environment.NewLine);
pattern.Append(@") #End third condition" + Environment.NewLine);
pattern.Append(@") #End OR condition" + Environment.NewLine);
pattern.Append(@"$ #End of string" + Environment.NewLine);
Regex rgx = new Regex(pattern.ToString(), RegexOptions.IgnoreCase
| RegexOptions.CultureInvariant
| RegexOptions.IgnorePatternWhitespace
| RegexOptions.Compiled);
Match match = rgx.Match(addressToParse);
if (match.Success)
{
foreach (string name in rgx.GetGroupNames())
{
if ( (match.Groups[name].Value != String.Empty) && (name == "City" || name == "State" || name == "Zip"))
{
Console.WriteLine(@"{0} = ""{1}""", name, match.Groups[name].Value.Trim());
}
}
}
}
}
}