0

我有这个正则表达式:

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"

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

4

2 回答 2

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 正则表达式的大量信息。

于 2013-08-09T04:46:57.740 回答
-1

已编辑,根据评论...

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

试试[0-9]吧。

于 2013-08-09T04:47:17.637 回答