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

3
在Java中,哪种正则表达式更适合匹配一个长度为17个字符的字符串,所有字母都大写,且不包含字母I(i),O(o)或Q(q)。
我尝试了以下正则表达式,但它仍然匹配I、O和Q,甚至比17个字符多或少。
^[A-Z]+

我该如何改进这个问题?

3个回答

6
你的方法有三个问题:
  1. 你匹配了任何一个大写英文字母。要解决这个问题,你需要用 [A-HJ-NPR-Z] 替换 [A-Z]。这将匹配从 AH,从 JN,字母 P 和从 RZ
  2. 第二个问题是你匹配了 一个或多个(由于 +)。为了匹配 恰好 17 个字符,+ 将需要变成 {17}
  3. 步骤 1 和 2 只会匹配在指定范围内包含 17 个大写字母的任何字符串。为了确保字符串不包含其他内容,在表达式开头加上 ^,在结尾加上 $。这将确保字符串不由其他任何内容组成。
因此,您的表达式应如下所示:^[A-HJ-NPR-Z]{17}$。正则表达式的示例可在此处查看: https://regex101.com/r/fS4eP7/1

你应该声明最终的正则表达式为 ^[A-HJ-NPR-Z]{17}$ - dotvav

5

谢谢,但这个是否恰好匹配17个字符?并且是在Java中吗? - nmvictor
@nmvictor 是的,它将匹配 17 并且是使用 Java 编写的。 - vks

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接