我有以下字符串B113AAA
,SV54DDD
。我想测试基于此格式[LETTER{LETTER}][NUMBERNUMBER{NUMBER}][LETTERLETTERLETTER]
的任何String。
我放置了第二个{letter}
和第三个{number}
,因为它是可选的。我想知道我是否可以使用正则表达式来执行此操作,而无需任何其他条件语句(if)。例如,如果首字母为B
,则不需要{}
中的第二个字母,如果为B
,则中间可以有3个数字。但是,如果不是B
,则必须包含2个字母和2个数字(LETTERLETTER NUMBERNUMBER LETTER LETTER LETTER
)。
谢谢!
这仅适用于BB1N
,不适用于B1N
。
String x ="B1N";
if(x.matches("[A-Z]{2}[0-9][A-Z]"))
答案 0 :(得分:1)
您可以根据需要使用轮换
((一个字母和三个数字)或((两个字母和两个数字))和树字母
所以你可以这样写:
String regex = "([A-Z][0-9]{3}|[A-Z]{2}[0-9]{2})[A-Z]{3}";
List<String> list = Arrays.asList("B123XXX", "BB123XXX","B12XXX", "BB12XXX","BB12XXXX");
for (String string : list) {
System.out.println(string + " : " + string.matches(regex));
}
答案 1 :(得分:1)
是的,有可能。您可以将其设置为:
String regex = "^((?:B\d{3})|(?:[AC-Z][A-Z]\d{2}))[A-Z]{3}$"
然后按照以下方式进行比赛:
String x = ... ; // Represents your string to be compared.
if(x.matches(regex))