地址中的正则表达式

时间:2013-08-09 04:41:48

标签: java regex

我有这个正则表达式:

String regexPattern = "[0-9A-Za-z]+(st|nd|rd|th)" + " " + "floor";

我想对它进行测试:

String lineString = "8th floor, Prince's Building, 12 Chater Road";

所以我这样做:

boolean isMatching = lineString.matches(regexPattern);

并返回false。为什么呢?

我认为它与Java中的空格有关,所以我删除了regexPattern变量中的空格,使其读取

regexPattern = "[0-9A-Za-z]+(st|nd|rd|th)floor";

并将其与没有空格的字符串匹配:

String lineString = "8thfloor,Prince'sBuilding,12ChaterRoad"

它仍然返回false。为什么?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

如果整个字符串与模式匹配,则

String.matches()仅返回true

尝试将.*添加到正则表达式的开头和结尾。

示例:

String regex = ".*[0-9A-Za-z]+(st|nd|rd|th)" + " " + "floor.*";

这不是最好的方法,但是......


这是一个更好的选择:

String input = "8th floor, Prince's Building, 12 Chater Road";
String regex = "[0-9A-Za-z]+(st|nd|rd|th)" + " " + "floor";
Pattern p = Pattern.compile(regex);
boolean isMatch = p.matcher(input).find();

如果要提取楼层编号,请执行以下操作:

String input = "8th floor, Prince's Building, 12 Chater Road";
String regex = "([0-9A-Za-z])+(st|nd|rd|th)" + " " + "floor";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
if (m.find()) {
    String num = m.group(1);
    String suffix = m.group(2);
    System.out.println("Welcome to the " + num + suffix + " floor!");
    // prints 'Welcome to the 8th floor!'
}

查看Pattern API以获取有关Java正则表达式的大量信息。

答案 1 :(得分:-1)

编辑,每条评论......

[0-9A-Za-z]+部分贪婪匹配,直到th结束。

请尝试[0-9]

相关问题