首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java: Match City Regex

Java: Match City Regex
EN

Stack Overflow用户
提问于 2015-08-07 05:41:39
回答 3查看 944关注 0票数 0

我使用以下正则表达式来匹配城市:

代码语言:javascript
复制
[a-zA-Z]+(?:[ '-][a-zA-Z]+)*

问题是它不仅与城市相匹配,而且也是街道名称的一部分。

我怎样才能使它只与城市(如布鲁克林和哥伦比亚城)相匹配?

更新:

数据用一行文本表示(每个地址将分别输入regex引擎):

代码语言:javascript
复制
    2778 Ray Ridge Pkwy, 
Brooklyn NY 1194-5954



1776 99th St,
Brooklyn NY 11994-1264

 1776 99th St,
Columbia City  OR 11994-1264
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-07 06:14:06

我建议以下方法:从字符串的开头到两个大写字母与ZIP后面的第一次出现为止,匹配单词(请参见下面的(?=\s+[A-Z]{2}\s+\d{5}-\d{4}) ):

代码语言:javascript
复制
^[A-Za-z]+(?:[\s'-]+[A-Za-z]+)*(?=\s+[A-Z]{2}\s+\d+-\d+)

请参阅演示

裁判官:

  • ^ -然后从一开始就开始看
  • [A-Za-z]+ -匹配一个单词
  • (?:[\s'-]+[A-Za-z]+)* -匹配0或多个单词.
  • (?=\s+[A-Z]{2}\s+\d+-\d+) -就在空格+2个大写字母、空格、1个或更多数字、连字符和1个或更多数字之前。

如果ZIP (或任何数字所代表的数字)是可选的,则只需使用2个大写字母:

代码语言:javascript
复制
^[A-Za-z]+(?:[\s'-]+[A-Za-z]+)*(?=\s+[A-Z]{2}\b)

请注意,\b in \s+[A-Z]{2}\b是一个单词边界,它将强制一个非单词(空格或标点符号,甚至字符串的末尾)出现在两个大写字母之后。

只是不要忘记在Java中使用双反斜杠来转义regex特殊的元字符。

这是一个Java代码演示

代码语言:javascript
复制
String s = "Brooklyn NY 1194-5954";
Pattern pattern = Pattern.compile("^[A-Za-z]+(?:[\\s'-]+[A-Za-z]+)*(?=\\s+[A-Z]{2}\\b)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(0)); 
} 
票数 2
EN

Stack Overflow用户

发布于 2015-08-07 06:09:44

好的..。我想经过几个小时的调整和测试,我终于找到了。可能对其他人有帮助。这就是诀窍:

代码语言:javascript
复制
(?<=\n)[a-zA-Z]+(?:[ '-][a-z]+)* ?[A-Z]?[a-z]+
票数 1
EN

Stack Overflow用户

发布于 2015-08-07 06:13:24

如果您的所有数据都类似于问题中的示例,数据中的模式是从街道后面的逗号到至少两个大写字母(表示状态)的所有内容。

此模式与所描述的模式匹配,并选择一个应代表城市的组:

代码语言:javascript
复制
,\s+([a-zA-Z\s]*)[A-Z]{2,}?\s+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31870493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档