【问题标题】:How to match postal address with iso letter code and zip?如何将邮政地址与 iso 字母代码和 zip 匹配?
【发布时间】:2013-12-11 20:28:07
【问题描述】:

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

DE-12345

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

我可以改进一下吗?

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

  • 两个字母

  • 只有数字 ?

【问题讨论】:

  • 考虑到一些国家也在其邮政编码中使用字母。 (比如Aberdeen就是AB10)
  • Ermm ...许多国家/地区没有 5 位数的邮政编码。
  • 我的(印度)中没有 6 位数字的字母
  • 你能保证你的字符串格式准确吗?

标签: java regex


【解决方案1】:

忽略每个国家都有完全不同的格式这一事实。

要在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);
}

【讨论】:

  • 我可以做些什么来使字母组可选? DE-
  • 是的,这也会使 - 可选
【解决方案2】:

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

目前,您的正则表达式运行良好。

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 2022-01-20
      相关资源
      最近更新 更多