2014-10-01 100 views
0

我想写一个正则表达式将只匹配第1季度qtr2号,qtr3qtr4有以下的正则表达式[q|qtr|qtrs|quarter]+[1-4]的帮助,但问题是,如果我问这样的问题:“Ficoscore for Q21 2005”在Q和21之间增加一个空格,即“2005年Q 21的Ficoscore”,这是无效的。正则表达式来限制数字

String regEx = "([q|qtr|qtrs|quarter]+[1-4])"; 
    Pattern pattern = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE); 
    Matcher matcher = pattern.matcher(userQuerySentence); 
    System.out.println(matcher.matches()); 
    while (matcher.find()) { 
    String quarterString = matcher.group(); 
    userQuerySentence = userQuerySentence.replaceAll(quarterString, 
       (quarterString.substring(0, quarterString.length() - 1) + " " + quarterString.substring(quarterString 
         .length() - 1))); 
    } 

回答

1

[q|qtr|qtrs|quarter]是一个字符类,我想你想(q|qtr|qtrs|quarter)

String regEx = "(?i)\\b((?:q(?:trs?|uarter)?)[1-4])\\b"; 
+0

M42我的字符串会是这样“Ficoscore 2005年第一季度”从此我要改变字符串为“Ficoscore为2005年第1季度“,但与上述正则表达式没有任何匹配。 – 2014-10-01 08:22:23

+0

首先使用'(?i)'不区分大小写的修饰符。 – 2014-10-01 08:23:29

+0

@ M42我认为你不介意编辑。 lang也是java,所以你需要再次逃脱。 – 2014-10-01 08:24:34