用于检查字符串是否具有特定位数的正则表达式

时间:2011-08-22 07:27:15

标签: java regex

我的数据库中有地址信息和一些垃圾,我必须检查字符串是否有我需要处理的邮政编码。你能解释一下如何检查一个字符串是否有5位数字。例如,

String addr = 10100 Trinity Parkway, 5th Floor Stockton, CA 95219; 

因此它必须与此字符串匹配,因为它具有5位数的邮政编码。有没有办法使用Java Regular Expression进行检查?

更新

String addr = "10100 Trinity Parkway, 5th Floor Stockton, CA 95219"; 
String addressMatcher = "\\d{5}";
if(addr.matches(addressMatcher)){
System.out.println(addr);
}

上面是我在获得答案后使用的代码,但没有正则表达式匹配并打印addr。我做错了吗? 问候, KARTHIK

2 个答案:

答案 0 :(得分:9)

简单表达式是".*\\d{5}$",表示你想要任何字符0次或更多次,然后任何数字5次,然后是字符串的结尾。请注意,这说明需要转义Java字符串中的斜杠。

如果字符串末尾可能包含更多字符,则可以将.*附加到表达式以匹配它们。但是,这也可能最终匹配地址中的数字,因此请确保您的数据采用一致的预期格式。

在这种情况下,正则表达式可能不够,因为并非所有5位数字实际上都是邮政编码。同样,某些邮政编码可能包含其他数字(通常在前五位后跟-之后。)

答案 1 :(得分:0)

我不太确定这是否是你要找的:

(\ W \ S *)+,(\ S *(\ W \ S *) \ S * [AZ] {2} \ S * [1-9] { 5}

此表达式将匹配:
1 - 任何带有逗号后跟逗号的单词,
2 - 然后可选的重复单词用空格分隔,后跟逗号
3 - 最后,它以两个字符(状态代码)结束,后跟5个数字(非零数字)的邮政编码
我希望这有帮助

[编辑]
此表达式将过滤掉地址中不是正确位置的数字作为邮政编码,例如您的示例中的(10100)