正则表达式匹配此字符串模式

时间:2012-07-13 15:00:45

标签: java regex gwt

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

模式必须符合以下格式的字符串(基本上这是我尝试发送到Google地图以获取坐标的地址字符串:

"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]+"

如果它们匹配某些可接受的字符串模式,它们也会匹配不可接受的字符串模式。

所以我想知道是否有人可以帮助我。

由于

2 个答案:

答案 0 :(得分: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*

  5. 我使用\w作为街道名称来支持“12th”等编号名称。

    当然,这些句子假设城市只是一个单词。如果它是“纽约”怎么办?它还假设街道只是一个单词 - “123 Broadway,Denver,USA” - 并且不会支持类似“123 West 12th Drive”的内容。您可能需要更多地考虑一下有效地址的确切构成。

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

答案 1 :(得分:1)

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

评论后编辑

您还必须分析String[].length以确定少于两个,的人。{/ p>

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