private static Match TryParseUnitNumber(string addressString, Address address) { foreach (var unitNumberRegex in _unitNumberRegexes) { var match = unitNumberRegex.Match(addressString); if (match.Success) { address.UnitNumber = match.Groups.Count > 1 ? match.Groups[1].Value : match.Value; return match; } } return null; }
private static void WipeAddress(Address address, string wipeString) { address.UnitNumber = wipeString; address.HouseNumber = wipeString; address.StreetDirPrefix = wipeString; address.StreetName = wipeString; address.StreetDesignator = wipeString; address.StreetDirSuffix = wipeString; address.Floor = wipeString; }
private static Match TryParseHouseNumber(string addressString, Address address) { var match = _houseNumberRegex.Match(addressString); if (match.Success) { address.HouseNumber = match.Value; } return match; }
private static Match TryParseStreetDesignator(string addressString, Address address) { var match = _streetDesignatorRegex.Match(addressString); if (match.Success) { address.StreetDesignator = _streetDesignatorAbbreviations.ContainsKey(match.Value) ? _streetDesignatorAbbreviations[match.Value] : ToFirstUpper(match.Value); } return match; }
private static Match TryParseFloor(string addressString, Address address) { foreach (var floorRegex in _floorRegexes) { var match = floorRegex.Match(addressString); if (match.Success) { address.Floor = match.Groups.Count > 1 ? match.Groups[1].Value : match.Value; return match; } } return null; }
private static Match TryParseDirectionSuffix(string addressString, Address address) { var match = _directionSuffixRegex.Match(addressString); if (match.Success) { address.StreetDirSuffix = match.Value.ToUpper(); } return match; }
private static void ParseInternal(string addressString, Address address) { // Floor number or name. var match = TryParseFloor(addressString, address); RemoveMatch(ref addressString, match); // Unit number. match = TryParseUnitNumber(addressString, address); RemoveMatch(ref addressString, match); // Street number. match = TryParseHouseNumber(addressString, address); RemoveMatch(ref addressString, match); // Street designator. match = TryParseStreetDesignator(addressString, address); RemoveMatch(ref addressString, match); // Street direction prefix. match = TryParseDirectionPrefix(addressString, address); RemoveMatch(ref addressString, match); // Street direction suffix. match = TryParseDirectionSuffix(addressString, address); RemoveMatch(ref addressString, match); // Street name. match = _streetNameRegex.Match(addressString); address.StreetName = (match.Success ? match.Value : addressString).Trim(); }
/// <summary> /// Parses address string and returns new <b>Address</b> instance populated with parsed values. /// </summary> /// <param name="addressString">Address string that may contain unit and house numbers, street name and floor number.</param> /// <param name="useEmptyStringsByDefault">If <b>true</b>, address properties that are not found in address string will be populated with empty strings.</param> /// <returns><b>Address</b> instance populated with parsing results.</returns> public static Address Parse(string addressString, bool useEmptyStringsByDefault = true) { if (addressString == null) throw new ArgumentNullException("addressString"); var address = new Address(); if (useEmptyStringsByDefault) WipeAddress(address, ""); ParseInternal(addressString, address); return address; }
/// <summary> /// Parses address string and populates <b>Address</b> instance with parsed values. /// </summary> /// <param name="addressString">Address string that may contain unit and house numbers, street name and floor number.</param> /// <param name="address"><b>Address</b> instance to be populated with parsing results.</param> /// <param name="useEmptyStringsByDefault">If <b>true</b>, address properties that are not found in address string will be populated with empty strings.</param> public static void Parse(string addressString, Address address, bool useEmptyStringsByDefault = true) { if (addressString == null) throw new ArgumentNullException("addressString"); if (address == null) throw new ArgumentNullException("address"); WipeAddress(address, useEmptyStringsByDefault ? "" : null); ParseInternal(addressString, address); }