public static AddressNL FormatAddressUsingRegex(string address)
        {
            address = address.Trim();

            //((^[0-9-]+)? Check for possible number at the beginning(streetname) Group 1
            //[A-Za-z-\s.]+ Check for letters(streetname) Group 1
            //(\d[A-Za-z-\s]+)?) check for letters somewhere in the streetname (3e willem de "2e" straat) Group 1
            //get number(housenumber) Group 4
            //get possible extension Group 5
            var match        = Regex.Match(address, @"((^[0-9-]+)?[A-Za-z-\s.]+(\d[A-Za-z\s]+)?)(\d+)([a-zA-Z0-9-\s]+)?", RegexOptions.IgnoreCase);
            var addressFinal = new AddressNL();

            if (match.Success)
            {
                addressFinal.Street = match.Groups[1].ToString();
                var s  = match.Groups[0].ToString();
                var s2 = match.Groups[1].ToString();
                var s1 = match.Groups[2].ToString();
                addressFinal.HouseNumber           = match.Groups[4].ToString();
                addressFinal.HouseNumberExtension += match.Groups[5].ToString();
                addressFinal.IsValid = true;

                return(addressFinal);
            }

            return(new AddressNL {
                IsValid = false
            });
        }
        public static AddressNL FormatAddress(string address)
        {
            string housenumber      = string.Empty;
            string housenumberExt   = string.Empty;
            string street           = string.Empty;
            int    housenumberindex = address.Length;
            bool   numberfilled     = false;
            string lastitem         = string.Empty;

            for (int i = address.Length; i > 0; i--)
            {
                string item   = address.Substring(i - 1, 1);
                int    number = 0;

                if (int.TryParse(item, out number))
                {
                    if ((housenumberindex - i) > 1)
                    {
                        string tempstr = street;
                        street = number.ToString() + street;
                    }
                    else
                    {
                        numberfilled = true;
                        string tempnr = housenumber;
                        housenumber      = number.ToString() + tempnr;
                        housenumberindex = i;
                    }
                }
                else
                {
                    if (numberfilled)
                    {
                        if (item.Contains("-"))
                        {
                            if (int.TryParse(lastitem, out number))
                            {
                                string tempnr = housenumber;
                                housenumber      = item + tempnr;
                                housenumberindex = i;
                            }
                            else
                            {
                                string tempstr = street;
                                street = item + street;
                            }
                        }
                        else
                        {
                            string tempstr = street;
                            street = item + street;
                        }
                    }
                    else
                    {
                        string tempnrext = housenumberExt;
                        housenumberExt   = item + housenumberExt;
                        housenumberindex = i;
                    }
                }

                lastitem = item;
            }

            AddressNL result = new AddressNL();

            if (String.IsNullOrEmpty(street))
            {
                result.Street  = address;
                result.IsValid = false;
            }
            else
            {
                street = street.Trim();

                if (street.Substring(street.Length - 1, 1).Contains("-"))
                {
                    street = street.Substring(0, street.Length - 1);
                }


                result.Street = street;

                Regex hnRegex = new Regex(@"(.*?)([^\d].*)");
                Match m       = hnRegex.Match(housenumber + housenumberExt);

                if (m.Groups.Count > 1)
                {
                    result.HouseNumber          = m.Groups[1].Value;
                    result.HouseNumberExtension = m.Groups[2].Value;
                }
                else
                {
                    result.HouseNumber          = housenumber;
                    result.HouseNumberExtension = String.Empty;
                }
                result.IsValid = true;
            }
            return(result);
        }