Выражение регулярного выражения получает 1) вместо просто числа - PullRequest
2 голосов
/ 22 февраля 2020

Я хочу создать соответствующий шаблон для следующего:

FirstName LastName (ID: 1)

Код:

Pattern pattern = Pattern.compile("^([A-Za-z0-9_ ].*)(ID: (?<customerId>[0-9].*))$");
Matcher matcher = pattern.matcher(customer.getSelectedItem().toString());
if (matcher.matches()) {
    String customerId = matcher.group("customerId"); // returns 1) instead of just 1
    ...

Проблема в том, что мое выражение регулярного выражения возвращает 1) вместо 1 или любое число.

Ответы [ 2 ]

4 голосов
/ 22 февраля 2020

Удаление .* означает, что 0 или более любых символов (включая закрывающую скобку):

Pattern.compile("^([A-Za-z0-9_( ]*)(ID: (?<customerId>[0-9]*))\\)$");

Вы также можете удалить группы, если не хотите захватывать:

Pattern.compile("^[\\w ]*\\(ID: (?<customerId>[0-9]*)\\)$");
1 голос
/ 22 февраля 2020

Поскольку вас интересует только идентификатор клиента, вы слишком усложняете вещи. В соответствии с вашим строковым шаблоном FirstName LastName (ID: 1) и вашим текущим шаблоном (и принятым ответом) существует нет заключительного паратеза, за исключением идентификатора интереса. Поэтому простой положительный взгляд должен дать правильный результат:

\\d+(?=\\)

См. здесь . Добавьте конец строки ancor $, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...