【问题标题】:Parsing address with Regex使用正则表达式解析地址
【发布时间】:2015-01-29 16:04:20
【问题描述】:

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

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

我一直在尝试创建一个模式供它使用,但是在分析字符串和剖析它时我有点迷茫。

有人可以帮我开始吗?

【问题讨论】:

  • 如果您向我们展示您的尝试,效果最好。 On 所以我们不希望只根据要求编写代码。这不是订购网站的编程。
  • 我的问题更多是为了让人们将我链接到我可以阅读并获得我需要继续的信息的特定课程/文档。
  • 邮政编码总是5位数字吗?
  • 我来自丹麦,所以在我的例子中,邮政编码是四位数字,所以我的目标是让它与四位代码一起工作——所以回答你的问题;没有。
  • 您的问题与正则表达式本身一样古老。看看stackoverflow.com/a/20437712/860196 - 最好不要对地址使用正则表达式。

标签: java regex parsing


【解决方案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+) 仅当其后跟一个或多个数字加上一个或多个空格加上一个或多个数字时才匹配一个或多个空格。这样门牌号前面的空格就满足了这个条件。所以它匹配了。

  • | 称为交替运算符。

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

  • (?&lt;=\\d+)\\s+(?=\\d+) 这匹配数字之间的所有空格。所以门牌号和邮政编码之间的空格是匹配的。

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

【讨论】:

  • 谢谢!这解决了我的问题——你能谈谈你是如何继续创建那个正则表达式的吗?我可以在哪里学习创建类似的表达方式?再次感谢您的宝贵时间!
  • 添加了一些解释。 www.regular-expressions.info 学习正则表达式的最佳网站。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多