【问题标题】:How to make a regular expression find street/road using Java?如何使用 Java 使正则表达式查找街道/道路?
【发布时间】:2011-10-17 08:54:41
【问题描述】:

我正在尝试用 Java 制作一个正则表达式,它可以粗略地用于匹配某些街道名称。我想这样做,以便给定以下字符串:

然后有人决定去大街小酌一杯

将匹配“大街”一词。这就是前面的单词和单词“street”来获得街道名称。我尝试过这样的事情:

Pattern.compile("(\\w+\\s*(road|street|square|rd|st|sq)\\W+)");

但这失败了,看来Java是想匹配整个句子,但我只是对几个单词感兴趣。我也尝试了一些不情愿的量词,但似乎没有任何效果。

任何帮助/建议将不胜感激。谢谢!

【问题讨论】:

  • (\w+ (road|street|square|rd|st|sq)) ...这行不通吗?

标签: java regex pattern-matching


【解决方案1】:

确保使用Matcher.find 而不是Matcher.matches

这在我的机器上运行良好:

String s = "Then someone decided to go to the high street for a drink";

Pattern p = Pattern.compile("(\\w+\\s*(road|street|square|rd|st|sq)\\W+)");

Matcher m = p.matcher(s);

System.out.println(m.find());   // prints true
System.out.println(m.group());  // prints "high street"

你也可以稍微简化一下表达式:

\w+\s*(road|street|square|rd|st|sq)\W

\w+\s*(r(oa)?d|st(reet)?|sq(uare)?)\W

(给出与上面相同的输出)

【讨论】:

  • @Ralph,实际上不涉及捕获组...m.group() 返回与表达式匹配的整个子字符串(即使您没有 (...)。)
  • 提及捕获组总是一个有用的提示!这是真的:D
  • 非常感谢,看来是我使用的方法而不是正则表达式出错了。
【解决方案2】:

您可以使用在线regex tester 来调试您的表达式。它似乎有效。

我认为您可能想尝试为自己编写一个最小示例,以便您可以测试您的代码,...或使用测试驱动开发。

也许您应该使用online ressource 来刷新您的记忆。

【讨论】:

  • 本质上是这样;实时调频?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
相关资源
最近更新 更多