Если вы проверяете строку, вы должны ожидать совпадения всей строки.Это означает, что вы должны использовать .matches()
, а не .find()
метод, так как .matches()
требует полного совпадения строк.
Чтобы c
соответствовало c
и C
, вы можете использовать Pattern.CASE_INSENSITIVE
пометьте Pattern.compile
или добавьте к шаблону опцию встроенного флага (?i)
.
Чтобы сопоставить один или несколько пробелов, можно использовать +
или \\s+
.
.начальные нули, вы можете добавить число соответствующих частей с 0*
.
Следовательно, вы можете использовать
String regex = "(?i)C\\s+0*(\\d{1,2}|1\\d{2}|200)\\s+0*([1-4]?\\d|50)";
, а затем
См. демонстрационную версию regex и график Regulex:

См. Демонстрацию Java :
String input = "C 200 50";
String regex = "(?i)C +0*(\\d{1,2}|1\\d{2}|200) +0*([1-4]?\\d|50)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
boolean found = false;
if (matcher.matches()) {
System.out.println("I found the text "+matcher.group()+" starting at index "+
matcher.start()+" and ending at index "+matcher.end());
found = true;
}
Вывод:
I found the text C 200 50 starting at index 0 and ending at index 8
Если вам нужно частичное совпадение, используйте шаблон с методом .find()
в блоке while
.Чтобы соответствовать целым словам, оберните шаблон с \\b
:
String regex = "(?i)\\bC\\s+0*(\\d{1,2}|1\\d{2}|200)\\s+0*([1-4]?\\d|50)\\b";