Android-студия Kotlin Regex отличается от ожидаемого - PullRequest
0 голосов
/ 09 ноября 2018

У меня проблема с определенным регулярным выражением, которое возвращает значение, отличное от ожидаемого при работе в Android Studio.

Сценарий:

Код прост:

val regex = "(?<=N|E|\\G)\\d{2}(?=\\d*$)".toRegex()
print("${regex.findAll("N2032354345").count()}")

Это должно вывести 5, поскольку в этой строке 5 совпадений (https://regex101.com/r/6PDbkI/1) и если мы запустим Ideone.com или Kotlin Playground , результат ожидается 5 *. 1016 *

Однако в Android Studio результат равен 1:

Теория:

Похоже, что регулярное выражение в Android Studio не может использовать оператор \G (что может быть связано с разделением Kotlin с регулярным выражением не так, как ожидалось )

Кто-нибудь сталкивался с такой же проблемой? Есть ли способ изменить регулярное выражение на аналогичное, которое не работает в Android Studio? Я что-то пропустил?

1 Ответ

0 голосов
/ 09 ноября 2018

Android Pattern документация список \G в качестве поддерживаемого оператора:

\G Конец предыдущего матча

Следовательно, это звучит как ошибка Android Studio.

Пока это не исправлено, вы можете использовать обходной путь для вашего сценария, который включает в себя всего дюжину цифр во входных данных:

val regex = "(?<=[NE]\\d{0,100})\\d{2}(?=\\d*$)".toRegex()

Шаблон соответствует:

  • (?<=[NE]\d{0,100}) - позиция, которой непосредственно предшествуют N или E и цифры от 0 до 100
  • \d{2} - две цифры
  • (?=\d*$) - после 0 или более цифр в конце строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...