有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

匹配此字符串模式的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]+"

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

所以我想知道是否有人能帮我做这些

谢谢


共 (2) 个答案

  1. # 1 楼答案

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

    这些模式应该有效:

    1. 对于“美国迈阿密someStreet 2205”:\d+ \w+, [A-Za-z]+, [A-Z]+

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

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

    4. 对于“美国迈阿密somestreet 2205”:\d+ \w+ [A-Za-z]+ [A-Za-z]+\s*

    我使用\w作为街道名称,以支持像“12”这样的编号名称

    当然,这些句子假设城市只是一个单词。如果是“纽约”呢?它还假设街道是一个单词“123百老汇,丹佛,美国”,不支持像“123西12路”这样的东西。您可能需要进一步考虑什么才是有效地址

    GoogleAPI通常非常健壮,所以我希望GoogleMapsAPI能够很好地检测地址格式。有一个很好的机会,你只是在为自己做额外的工作,试图做这种验证

  2. # 2 楼答案

    使用,regex拆分字符串,然后根据需要逐步分析字符串[3]结果

    评论后编辑

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

    通过这种方式,可以在,之前/之后使用trim()删除尾随空格,并且可以将重点放在专用的简单正则表达式上