从地址中提取邮政编码

时间:2015-01-10 03:44:16

标签: c# .net postal-code

我正在寻找c#中的解决方案来从地址中提取邮政编码信息。

以下国家的邮政编码

Canada,US,Germany,UK,Turkey,France,Pakistan,India,Italy.

地址可以是这样的

188 pleasant street, new minas, Nova Scotia b2p 6r6, Canada.

或     巴基斯坦卡拉奇75600,DHA,109 A,第3区。

我想要的:我想提取与城市或国家名称相邻的任何字母数字。但是难以为它创建正则表达式

2 个答案:

答案 0 :(得分:-1)

这是一项非常开放的任务。你必须遵循一些特定的格式。因为如果地址中有两个数字字符串会发生什么(比如街道是一个数字的情况)。因此有两种选择:

  • 地址始终采用特定格式,您知道实际格式
  • 拉链始终具有给定的长度

在这两种情况下,正则表达式都会引导您找到解决方案。 - 对于第一个示例,假设邮政编码按给定顺序排列(在原始示例中为'6r6'),您可以使用以下正则表达式模式:“(\ S +)\,?\ w + $” - 对于第二种情况,假设邮政编码是5位以上的数字,它位于第一个','之后,则可以使用以下模式来提取它:“(,。*)+(\ d {5 })”。第二组将是比赛中的邮政编码。

以下是您可以使用的代码: public static string GetSingleMatch(string address,string pattern,int group = 0) {     返回新的Regex(pattern,RegexOptions.IgnoreCase).Match(address).Groups [group] .Value; }

“group”可选参数表示将包含邮政编码的正则表达式组。

答案 1 :(得分:-2)

我认为你在国家是最后一个地址以及之前的城市或国家的地址中采用一般规则是合理的,因此邮政编码可以放在城市或州和国家之间,正如你在例子中所说的','是用作分隔符,因此它可以如下:

    private string GetPostCode(string address )
    {
        string result = string.Empty;

        string[] list = address.Split(',');
        list.Reverse();
        foreach (var item in list)
        {
            // if item contains numeric postcode 
            Regex re = new Regex(@"\d+");
            Match m = re.Match(item);
            result = m.Value;
            if (!string.IsNullOrEmpty(result))
                break;
        }

        return result;
    }

我希望它会有所帮助。