匹配此字符串模式的java正则表达式
我试图在GWT(Java)程序中构造一个正则表达式来匹配以下字符串模式
模式必须匹配以下格式的字符串(基本上这是一个地址字符串,我正试图发送到Google Maps以获取其坐标:
"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]+"
虽然它们匹配一些可接受的字符串模式,但它们也匹配不可接受的字符串模式
所以我想知道是否有人能帮我做这些
谢谢
# 1 楼答案
正如评论中提到的,最简单的方法是使用4个独立的正则表达式,而不是一个更容易出错的复杂正则表达式。(另外,如果使用倍数,可以更轻松地添加新的可接受模式。)
这些模式应该有效:
对于“美国迈阿密someStreet 2205”:
\d+ \w+, [A-Za-z]+, [A-Z]+
对于“美国迈阿密someStreet”:
\w+, [A-Za-z]+, [A-Z]+
对于“美国迈阿密”:
[A-Za-z]+, [A-Z]+
对于“美国迈阿密somestreet 2205”:
\d+ \w+ [A-Za-z]+ [A-Za-z]+\s*
我使用
\w
作为街道名称,以支持像“12”这样的编号名称当然,这些句子假设城市只是一个单词。如果是“纽约”呢?它还假设街道是一个单词“123百老汇,丹佛,美国”,不支持像“123西12路”这样的东西。您可能需要进一步考虑什么才是有效地址
GoogleAPI通常非常健壮,所以我希望GoogleMapsAPI能够很好地检测地址格式。有一个很好的机会,你只是在为自己做额外的工作,试图做这种验证
# 2 楼答案
使用
,
regex拆分字符串,然后根据需要逐步分析字符串[3]结果评论后编辑
您还必须分析
String[].length
以确定那些少于两个,
的人通过这种方式,可以在
,
之前/之后使用trim()删除尾随空格,并且可以将重点放在专用的简单正则表达式上