Как обнаружить @mentions в Kotlin с помощью регулярных выражений? - PullRequest
0 голосов
/ 28 февраля 2019

Мне нужна помощь в сопоставлении слов @mentions, которые сами содержат некоторые идентификаторы, которые будут использоваться для перенаправления пользователей на определенный идентификатор пользователя.

Вот моя строка:

val string = "Hello @[%user%]Akash(ef54321). Is @[%user%]Shubham(45321gg) there with you?"

Мне нужен разобранный ответ == "Здравствуйте, @Akash. @Shubham с вами?"

Также onClick of @Akash и @Shubham Мне нужны идентификаторы, которые есть в формате (xxxxx). И @mentions должны отображаться на сером фоне. Любая помощь будет высоко ценится. Спасибо, я использую

val string = "Hello @[%user%]Akash(54321).Is @[%user%]Shubham(543215) there with you "
val matcher = Pattern.compile("^[@]\\w+|(?<=\\s)[@]\\w+").matcher(string)
while (matcher.find()) {
     println("TAG"+matcher.group())
}

1 Ответ

0 голосов
/ 28 февраля 2019

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

val string = "Hello @[%user%]Akash(ef54321). Is @[%user%]Shubham(45321gg) there with you?"
val rx = Regex("""@\[%user%](\w+)\((\w+)\)""")
val res = string.replace(rx, "@$1")
println(res)   // => Hello @Akash. Is @Shubham there with yo?
val users =rx.findAll(string).map{it.groups[1]!!.value}.toList()
val ids =rx.findAll(string).map{it.groups[2]!!.value}.toList()
println(users) // => [Akash, Shubham]
println(ids)   // => [ef54321, 45321gg]

См. Демонстрационную версию Kotlin .

Регулярное выражение @\[%user%](\w+)\((\w+)\) содержит две группы захвата для пользователей и для идентификаторов.В методе замены вы можете ссылаться на эти значения, используя $1 и $2 заполнители.

Детали шаблона

  • @\[%user%] - a @[%user%] буквенная строка
  • (\w+) - Группа захвата 1 (пользователь, $1): одна или несколько букв, цифр или подчеркиваний
  • \( - ( символ
  • (\w+) - Группа захвата 2 (ID, $2): одна или несколько букв, цифр или подчеркиваний
  • \) - ) символ.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...