Как найти все слово в котлине с помощью регулярных выражений - PullRequest
0 голосов
/ 03 октября 2018

Я хочу найти все слово в строке.Но я не знаю, как найти все слово в kotlin.Мое находящее слово - [не альфа], cba [не альфа].Мой пример кода ниже:

val testLink3 = """cba@cba cba"""
val word = "cba"
val matcher = "\\b[^a-zA-Z]*(?i)$word[^a-zA-Z]*\\b".toRegex()
val ret = matcher.find(testLink3)?.groupValues

Но вывод моего исходного кода - "cba". Мое ожидаемое значение - строковый массив, такой как "{cba, cba, cba}".Как найти это значение на языке котлин.

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете использовать

val testLink3 = """cBa@Cba cbA123"""
val word = "cba"
val matcher = "(?i)(?<!\\p{L})$word(?!\\p{L})".toRegex()
println(matcher.findAll(testLink3).map{it.value}.toList() )
println(matcher.findAll(testLink3).count() )
// => [cBa, Cba, cbA]
// => 3

См. Демоверсию онлайн Kotlin .

Чтобы получить список совпадений, вам нужно запустить метод findAll наобъект регулярного выражения, сопоставьте результаты со значениями и приведите к списку:

.findAll(testLink3).map{it.value}.toList()

Для подсчета совпадений вы можете использовать

matcher.findAll(testLink3).count()

демонстрационное выражение Regex

  • (?i) - модификатор, не чувствительный к регистру
  • (?<!\\p{L}) - отрицательный вид сзади, который не может найти совпадение, если непосредственно слева от текущего местоположения есть буква
  • $word - ваше word значение переменной
  • (?!\\p{L}) - отрицательный прогноз, который не дает совпадения, если непосредственно справа от текущего местоположения есть буква.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...