gpt4 book ai didi

Java:匹配城市正则表达式

转载 作者:行者123 更新时间:2023-12-01 22:10:53 26 4
gpt4 key购买 nike

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

[a-zA-Z]+(?:[ '-][a-zA-Z]+)*

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

如何使其仅匹配城市(例如布鲁克林和哥伦比亚市)?

更新:

数据以 1 行文本表示(每个地址将分别输入正则表达式引擎):

    2778 Ray Ridge Pkwy, 
Brooklyn NY 1194-5954



1776 99th St,
Brooklyn NY 11994-1264

1776 99th St,
Columbia City OR 11994-1264

最佳答案

我建议采用以下方法:从字符串开头开始匹配单词,直到第一次出现 2 个大写字母,后跟 ZIP(请参阅前瞻 (?=\s+[A-Z]{2}\s+\d{5}-\d{4}) 如下):

^[A-Za-z]+(?:[\s'-]+[A-Za-z]+)*(?=\s+[A-Z]{2}\s+\d+-\d+)

参见demo

正则表达式:

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

如果 ZIP(或数字代表的任何内容)是可选的,您可以只依赖 2 个大写字母:

^[A-Za-z]+(?:[\s'-]+[A-Za-z]+)*(?=\s+[A-Z]{2}\b)

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

只是不要忘记在 Java 中使用双反斜杠来转义正则表达式特殊元字符。

这是一个Java code demo :

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

关于Java:匹配城市正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com