正则表达式匹配17个大写字符

时间:2015-08-14 09:14:10

标签: java regex

在java中,哪个Regex更适合匹配长度为17个字符的字符串,所有字符串都是大写的,不包括字母I(i),O(o)或Q(q)。

我已经尝试了以下但它仍然匹配I,O和Q,包括甚至多于或少于17

^[A-Z]+

我如何改善这一点?

3 个答案:

答案 0 :(得分:6)

您的方法存在3个问题:

  1. 您正在匹配任何大写英文字符。要解决此问题,您需要将[A-Z]替换为[A-HJ-NPR-Z]。这应该匹配从AH,从JN,字母P以及RZ

  2. 第二个问题是您匹配一个或多个(由于+)。要匹配完全 17个字符,+将需要成为{17}

  3. 步骤1和2将简单匹配任何包含规定范围内的17个大写字母的字符串。要确保该字符串不包含任何其他内容,请在开头添加^,在表达式结尾添加$。这将确保字符串不是由其他任何东西组成的。

  4. 因此,您的表达式应如下所示:^[A-HJ-NPR-Z]{17}$。正则表达式的示例可用here

答案 1 :(得分:5)

^(?!.*(?:[IOQ]))[A-Z]{17}$

只需添加lookahead即可。请参阅演示。

https://regex101.com/r/uF4oY4/24

答案 2 :(得分:0)

大写字符串可以使用量词与序列中的消除进行比较。如果我们在Matcher类中使用匹配方法来限制字符数,它将检查下面的确切顺序。

    String upperCaseString = new String("ABCDEABCDEABCDEAE");
    System.out.println("value is " + Pattern.compile("([A-Z&&[^IOQ]]){17}").matcher(upperCaseString).matches());