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

Java 用于检查字符串是否具有特定位数的正则表达式,java,regex,Java,Regex,我的数据库中有地址信息和一些垃圾,我只需检查字符串是否有我需要处理的邮政编码。你能解释一下如何检查一个字符串是否有5位数字吗。比如说, String addr = 10100 Trinity Parkway, 5th Floor Stockton, CA 95219; 所以它必须匹配这个字符串,因为它有5位的邮政编码。使用Java正则表达式进行检查有什么方法吗 更新: String addr = "10100 Trinity Parkway, 5th Floor Stockton, CA 9

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

String addr = 10100 Trinity Parkway, 5th Floor Stockton, CA 95219; 
所以它必须匹配这个字符串,因为它有5位的邮政编码。使用Java正则表达式进行检查有什么方法吗

更新:

String addr = "10100 Trinity Parkway, 5th Floor Stockton, CA 95219"; 
String addressMatcher = "\\d{5}";
if(addr.matches(addressMatcher)){
System.out.println(addr);
}
上面是我在得到答案后使用的代码,但是没有一个正则表达式匹配并打印addr。我做错什么了吗? 当做
Karthik

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

如果字符串末尾可能有更多字符,则可以将
*
附加到表达式以匹配这些字符。不过,这也可能会导致地址中的数字匹配,所以请确保您的数据采用一致的预期格式


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

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

如果字符串末尾可能有更多字符,则可以将
*
附加到表达式以匹配这些字符。不过,这也可能会导致地址中的数字匹配,所以请确保您的数据采用一致的预期格式


在这种情况下,正则表达式可能不够,因为并非所有5位数字实际上都是邮政编码。此外,一些邮政编码可能包含额外的数字(通常在前五位数字后的
-
后面)。

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

(\w\s*)+,(\s*(\w\s*),)\s*[A-Z]{2}\s*[1-9]{5}

此表达式将匹配:
1-任何后跟逗号的空格,
2-然后可选重复单词,单词之间用空格分隔,后跟逗号
3-在结尾,以两个字符(州代码)结尾,然后是邮政编码,邮政编码为5位(非零位)
我希望这有帮助

[编辑]

此表达式将过滤掉地址中不在邮政编码正确位置的数字,例如示例中的(10100)

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

(\w\s*)+,(\s*(\w\s*),)\s*[A-Z]{2}\s*[1-9]{5}

此表达式将匹配:
1-任何后跟逗号的空格,
2-然后可选重复单词,单词之间用空格分隔,后跟逗号
3-在结尾,以两个字符(州代码)结尾,然后是邮政编码,邮政编码为5位(非零位)
我希望这有帮助

[编辑]

此表达式将过滤掉地址中不在邮政编码正确位置的数字,例如,您的示例中的(10100)是否也匹配123456789的子字符串,例如,在一句话“我的邮政编码是12345,我的电话号码是123456789”中,您可能会得到多个匹配项?这取决于您对正则表达式所做的操作。创建正则表达式对象后,有几个选项。@Neil是的,它会。不过,OP实际上将如何使用正则表达式还不清楚。看看他的输入字符串,他实际上在街道地址中也有5位数字(甚至考虑到单词边界)。因此,我给出了最简单的版本,OP可以使用它并根据需要进行改进。@dlev很好的观点-没有看到即使有单词边界,它也会匹配10100位。正则表达式没有匹配错误,我已经更新了我的问题。它是否也匹配123456789的子字符串,例如在一句话中“我的邮政编码是12345,我的电话号码是123456789”您可能会得到不止一个匹配项?这取决于您如何使用正则表达式。创建正则表达式对象后,有几个选项。@Neil是的,它会。不过,OP实际上将如何使用正则表达式还不清楚。看看他的输入字符串,他实际上在街道地址中也有5位数字(甚至考虑到单词边界)。因此,我给出了最简单的版本,OP可以使用它并根据需要进行改进。@dlev很好的观点-没有看到即使有单词边界,它也会匹配10100位。正则表达式没有匹配错误,我已经更新了我的问题。