регулярное выражение для проверки ввода C 200 50 - PullRequest
1 голос
/ 13 апреля 2019

Как мне написать регулярное выражение для ниже?

C 200 50

C / C может быть в верхнем или нижнем регистре.Диапазон от 200 - 0 до 200 Диапазон от 50 - o до 50

Все три слова разделены пробелом и могут содержать 1 или более пробелов.

Это то, что я пробовал до сих пор.

public static void main(String[] args) {
        String input = "C 200 50";
        String regex = "C{1} ([01]?[0-9]?[0-9]|2[0-9][0]|20[0]) ([01]?[0-5]|[0-5][0])";

        Pattern pattern = Pattern.compile(regex);    
        Matcher matcher = pattern.matcher(input);
        boolean found = false;    
        while (matcher.find()) {    
            System.out.println("I found the text "+matcher.group()+" starting at index "+    
             matcher.start()+" and ending at index "+matcher.end());    
            found = true;    
        }
    }

Не уверен, как использовать несколько пробелов, сначала верхний или нижний 'C'

1 Ответ

1 голос
/ 13 апреля 2019

Если вы проверяете строку, вы должны ожидать совпадения всей строки.Это означает, что вы должны использовать .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:

enter image description here

См. Демонстрацию 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...