我有这个正则表达式:
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。为什么?非常感谢任何帮助。
答案 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]
。