0

我正在尝试构造一个正则表达式以匹配 GWT (Java) 程序中的以下字符串模式

该模式必须匹配以下格式的字符串(基本上这是一个地址字符串,我试图发送到谷歌地图以获取坐标:

"2205 someStreet, Miami, USA"
OR
"someStreet, Miami, USA" 
OR
"Miami, USA"
OR
"2205 somestreet Miami USA "
All other variations should not be allowed

到目前为止,我已经尝试过这些正则表达式

"([0-9a-zA-Z]+ ((\\s){0,1} | (,){0,1} (\\s){0,1}) [0-9a-zA-Z]$)+ "
"^[0-9a-zA-Z]+,|\\s[0-9a-zA-Z]+"

虽然它们匹配一些可接受的字符串模式,但它们也匹配不可接受的字符串模式。

所以我想知道是否有人可以帮我解决这些问题。

谢谢

4

2 回答 2

2

正如评论中提到的,最简单的方法是使用 4 个单独的正则表达式,而不是一个更容易出错的怪物复杂的正则表达式。(此外,如果您使用倍数,您可以更轻松地添加新的可接受模式。)

这些模式应该有效:

  1. 对于“2205 someStreet, Miami, USA”:\d+ \w+, [A-Za-z]+, [A-Z]+

  2. 对于“someStreet, Miami, USA”:\w+, [A-Za-z]+, [A-Z]+

  3. 对于“美国迈阿密”:[A-Za-z]+, [A-Z]+

  4. 对于“2205 somestreet Miami USA”:\d+ \w+ [A-Za-z]+ [A-Za-z]+\s*

我用\w街道名称来支持像“12th”这样的编号名称。

当然,这些句子假设城市只是一个单词。如果是“纽约”呢?它还假设街道是一个单词——“123 Broadway, Denver, USA”——并且不支持“123 West 12th Drive”之类的内容。您可能需要更多地考虑究竟什么是有效地址。

Google API 通常非常强大,所以我希望 Google Maps API 能够在地址格式检测方面做得不错。通过尝试进行此类验证,您很有可能只是为自己做额外的工作。

于 2012-07-13T15:16:13.753 回答
1

, 使用正则表达式拆分您的字符串,然后根据需要逐步分析字符串 [3] 结果。

评论后编辑

您还必须分析String[].length以决定那些少于两个的,

通过这种方式,您可以使用 trim() 删除之前/之后的尾随空格,,并且您可以专注于专用的简单正则表达式。

于 2012-07-13T15:09:56.393 回答