使用Regex解析地址

时间:2015-01-29 16:04:21

标签: java regex parsing

我希望能够使用正则表达式将String解析为几个信息字符串。例如,让我们使用一个地址:“My Street 10 90210 Beverly Hills”。我可以通过以下方式创建字符串的示例:

  • My Street - 街道名称
  • 10 - 门牌号
  • 90210 - 邮政编码
  • Beverly Hills - city

我一直在尝试为它使用创建一个模式,但在分析字符串并剖析它时,我有点迷失。

有人可以让我开始这个吗?

1 个答案:

答案 0 :(得分:1)

我会使用string.split函数。

String s = "My Street 10 90210 Beverly Hills";
String parts[] = s.split("\\s+(?=\\d+\\s+\\d+)|(?<=\\d+)\\s+(?=[A-Z])|(?<=\\d+)\\s+(?=\\d+)");
System.out.println(Arrays.toString(parts));

输出:

[My Street, 10, 90210, Beverly Hills]

<强>解释

  • \\s+(?=\\d+\\s+\\d+)仅当一个或多个空格后跟一个或多个数字加上一个或多个空格加上一个或多个数字时才匹配。因此,门牌号前的空间将满足这个条件。所以它得到了匹配。

  • |被称为轮换操作员。

  • (?<=\\d+)\\s+(?=[A-Z])匹配一个或多个前面有一个或多个数字的空格,然后是大写字母。所以字符串city之前的空格会满足这个条件并且匹配。

  • (?<=\\d+)\\s+(?=\\d+)这匹配数字之间的所有空格。因此,门牌号和邮政编码之间的空格相匹配。

  • 根据匹配的空格拆分输入将为您提供所需的输出。