如何匹配邮政地址与iso字母代码和zip?

时间:2013-12-11 12:07:56

标签: java regex

我想使用正则表达式来验证和提取具有国家iso字母代码和邮政编码的邮政地址的值,格式如下:

DE-12345

到目前为止,我提出了:[a-zA-Z]{2}-\d+

我能改进吗?

进一步的问题:我可以使用什么正则表达式来提取

  • 两个字母

  • 仅限数字

3 个答案:

答案 0 :(得分:3)

忽略每个国家/地区格式完全不同的事实。

获取与java匹配的部分,用括号括起来并选择组。

Pattern p = Pattern.compile("([a-zA-Z]{2})-(\d+)");
Matcher m = p.matcher("DE-123");
if (m.matches()) {
  String letters = m.group(1);
  String numbers = m.group(2);
}

答案 1 :(得分:0)

改进取决于邮政地址被包围的内容......例如,如果它们被整页文本包围,那么你使用正则表达式会有所不同。

目前,你的正则表达式完全正常。

我唯一能想到的是,您可以获取所有有效国家/地区代码的列表,并进行大量更改,以便只匹配有效的代码。

要提取字母和数字,您可以将它们包装在捕获组中:

([a-zA-Z]{2})-(\d+)

第一个括号为第1组,第二个括号为第2组。

答案 2 :(得分:0)

严格来说,邮政编码是美利坚合众国境内使用的邮政编码/邮政编码系统。

验证国际邮政编码/邮政编码将会非常棘手。不同的国家使用具有不同允许字符,不同字符数和不同“标点符号”的完全不同的系统。甚至美国邮政系统也使用两种形式的邮政编码;即5位数和5 + 4位数。

postal codes的维基百科页面列出了许多国家/地区的格式,但您可能需要进一步研究。