从地址中提取邮政编码
Posted
技术标签:
【中文标题】从地址中提取邮政编码【英文标题】:extracting postal code from addresses 【发布时间】:2015-01-10 03:44:16 【问题描述】:我正在寻找 C# 中信息的解决方案。
以下国家的邮政编码
Canada,US,Germany,UK,Turkey,France,Pakistan,India,Italy.
地址可以是这样的
188 pleasant street, new minas, Nova Scotia b2p 6r6, Canada.
或 109 A, block 3, DHA, Karachi 75600, Pakistan。
我想要什么:我想提取与城市或国家名称相邻的任何字母数字。但是很难为其创建正则表达式
【问题讨论】:
如果您显示到目前为止的代码、输入是什么、您期望的输出是什么以及出了什么问题,人们会更容易帮助您。 与论坛网站不同,我们不使用“谢谢”、“任何帮助表示赞赏”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?. 这听起来很有价值。在我看来,有人可能已经写了这个,然后卖掉了。他们甚至可能有技术支持。当有人已经做得比你做得更好时,你为什么还要自己做呢? @salniro 是的。我有想法。我想提取与城市或国家名称相邻的任何字母数字。但是很难为其创建正则表达式 这篇文章可能对你有所帮助***.com/questions/1335293/… 【参考方案1】:这是一个相当开放的任务。您必须在其中遵循某些特定格式。因为如果地址中有两个数字字符串会发生什么(例如街道是数字的情况)。所以有两种可能:
地址始终采用特定格式,您知道实际格式 zip 始终具有给定的长度在这两种情况下,正则表达式都会引导您找到解决方案。 - 对于第一个示例,假设邮政编码按给定顺序排列(假设在原始示例中为 '6r6'),您可以使用以下正则表达式模式:“(\S+)\, ?\w+$” - 对于第二种情况,假设邮政编码是 5 位以上的数字,位于第一个 ',' 之后,那么可以使用以下模式来提取它:“(,.*)+(\d5 )”。第二组将是比赛中的邮政编码。
这是您可以使用的代码: 公共静态字符串GetSingleMatch(字符串地址,字符串模式,int group = 0) return new Regex(pattern, RegexOptions.IgnoreCase).Match(address).Groups[group].Value;
“group”可选参数表示将包含邮政编码的正则表达式组。
【讨论】:
【参考方案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;
希望对你有所帮助。
【讨论】:
这不是答案。您可能应该告诉正则表达式模式或其他内容。 @KaushikKishore :代码已更新。但我仍然不写确切的代码,我只是想给出一个建议。感谢您的评论。以上是关于从地址中提取邮政编码的主要内容,如果未能解决你的问题,请参考以下文章