在java中,哪个Regex更适合匹配长度为17个字符的字符串,所有字符串都是大写的,不包括字母I(i),O(o)或Q(q)。
我已经尝试了以下但它仍然匹配I,O和Q,包括甚至多于或少于17
^[A-Z]+
我如何改善这一点?
答案 0 :(得分:6)
您的方法存在3个问题:
您正在匹配任何大写英文字符。要解决此问题,您需要将[A-Z]
替换为[A-HJ-NPR-Z]
。这应该匹配从A
到H
,从J
到N
,字母P
以及R
到Z
。
第二个问题是您匹配一个或多个(由于+
)。要匹配完全 17个字符,+
将需要成为{17}
。
步骤1和2将简单匹配任何包含规定范围内的17个大写字母的字符串。要确保该字符串不包含任何其他内容,请在开头添加^
,在表达式结尾添加$
。这将确保字符串不是由其他任何东西组成的。
因此,您的表达式应如下所示:^[A-HJ-NPR-Z]{17}$
。正则表达式的示例可用here。
答案 1 :(得分:5)
答案 2 :(得分:0)
大写字符串可以使用量词与序列中的消除进行比较。如果我们在Matcher类中使用匹配方法来限制字符数,它将检查下面的确切顺序。
String upperCaseString = new String("ABCDEABCDEABCDEAE");
System.out.println("value is " + Pattern.compile("([A-Z&&[^IOQ]]){17}").matcher(upperCaseString).matches());