2013-01-10 121 views
0

我需要从地址中提取6位邮政编码。ReGex的邮政编码

“51勿拉士巴沙路#01-01宏利中心新加坡189554”

邮政代码始终是6位数,但不能肯定在最后的地址。

请帮我给一个合适的“java”正则表达式来获取上面的邮政编码地址。

ASMI

+1

请显示你的努力... [正则表达式教程](http://www.vogella.com/articles/JavaRegularExpressions/article.html) – Smit

+0

你说的邮政编码可能不是地址的最后6个字符。提供这些地址的一些例子,所以正则表达式可以适当缩小。 –

+0

的确如此,但他还没有说过是否只有邮政编码可以是6位数字。我想知道它是否总是最后6位数字的序列... –

回答

6

如果你能肯定的是,邮政编码是你输入的只有6位数,你应该能够逃脱:

Pattern zipPattern = Pattern.compile("(\\d{6})"); 
Matcher zipMatcher = zipPattern.matcher("51 Bras Basah Road #01-01 Manulife Centre Singapore 189554"); 
if (zipMatcher.find()) { 
    String zip = zipMatcher.group(1); 
} 

另见the API documentation of java.util.regex.Pattern

+0

我该如何使用它? – Asmi

+0

我已经测试了我修正的示例代码。它适用于您的示例。 –

+0

这是行不通的:( – Asmi

0

下面是简单的正则表达式

(。*)((\ d){6})$

第一组是 “51勿拉士巴沙路#01-01宏利中心新加坡” 第二组邮政编码(6digits)

+0

最后的'$'不需要邮政编码是最后6个字符吗?如果是这样,那不是OP想要的。 –

+0

@rkb感谢您的回答 – Asmi

+0

@DumumRanatunga是的,邮政编码并不总是在最后的地址,所以我会做的东西,将符合这个目的 – Asmi

0

下面是会发现最后六位数字正则表达式:

((\d{6}.*)*\s)?(\d{6})([^\d].*)?$ 

当然,Y OU需要编译图案时逃脱字符串:

Pattern postal_code_group3 = Pattern.compile("((\\d{6}.*)*\\s)?(\\d{6})([^\\d].*)?$"); 

您可以从任何比赛的3组得到的邮政编码。

请注意,除非邮政编码以字符串开头,否则组2会在邮政编码之前强制使用空格。

第4组负责邮政编码之后的任何事情,并且还防止将尾随的7位或更多位号码作为邮政编码进行匹配。

+0

我试过了,它不起作用 – Asmi