大写字母的Java正则表达式

时间:2014-06-12 14:09:21

标签: java regex

我开始熟悉Java,但我仍然发现正则表达式令人困惑。我需要检查一个元素是否有一行中的两个大写字母,一行中有三个大写字母,一行中有四个大写字母,或者一个大写字母,一个空格,然后是另一个大写字母。这是我到目前为止的代码,但我觉得有更好的(也是更有效的)方法。

 public class First {
    public static void main(String[] args) {
        String one = "A scenario - CAPI 200 - 001";
        String two = "A scenario - C T 200 - 001";
        String three = "A scenaRio - CT 200 - 001";
        String four = "A sCenario - CAP 200 - 001";


        Pattern p = Pattern.compile("[A-Z][A-Z][A-Z][A-Z]");
        Pattern q = Pattern.compile("[A-Z] [A-Z]");
        Pattern r = Pattern.compile("[A-Z][A-Z]");
        Pattern s = Pattern.compile("[A-Z][A-Z][A-Z]");

        Matcher m =p.matcher(one);
        if (m.find()){
            System.out.println(m.group());
        }
        Matcher d =q.matcher(two);
        if (d.find()){
            System.out.println(d.group());
        }
        Matcher e =r.matcher(three);
        if (e.find()){
            System.out.println(e.group());
        }
        Matcher a =s.matcher(four);
        if (a.find()){
            System.out.println(a.group());
        }
    }
}

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:5)

使用它来匹配2-4个大写字母,或大写字母,空格,大写

([A-Z]{2,4})|([A-Z] [A-Z]) 

编辑: 刚刚意识到你可能需要区分哪个组匹配。

在这种情况下,您所做的事情并没有错,但可以使用[A-Z]{2}方法进行优化以缩短正则表达式。如果您告诉我们代码需要做什么,我们可以更好地提出满足您需求的解决方案。

答案 1 :(得分:1)

{n}表示正则表达式n次。你真的应该使用这种方法。所以在你的情况下,使用

[A-Z]{4}
例如,

表示连续4次。

答案 2 :(得分:1)

您可以将所有内容合并到一个Pattern

例如:

String[] inputs = {
            // two capital letters in a row
            "AA",
            // three capital letters in a row
            "BBB",
            // four capital letters in a row
            "CCCC",
            // one capital letter, a space, and then another capital letter.
            "D D" };
String pattern = "[A-Z]{2,4}|[A-Z] [A-Z]";
for (String input: inputs) {
    System.out.println(Pattern.matches(pattern, input));
}

<强>输出

true
true
true
true

答案 3 :(得分:1)

首先,欢迎来到Regex世界。正则表达式用于将一组String模式汇总到一个表达式中。例如,如果我们引用任何以大写字母开头并且只包含字母字符且长度小于15的字符串,那么正则表达式将是:[A-Z][a-z]{,15}

在你提出问题的例子中,它没有使用正则表达式,因为你可以在一个正则表达式中汇总你想要匹配的所有情况,这个表达式可以有一个OR运算符。像这样的正则表达式组:

([A-Z]{2})|([A-Z]{3})|([A-Z]{4})|([A-Z] [A-Z]) 

但是当使用重复操作符{[minLenght],[Maxlength]}将fisrt树部分分组到一个表达式中时,表达式变为:

([A-Z]{2,4})|([A-Z] [A-Z]) 

括号中的顺序是指组顺序。