如何使用正则表达式检测Kotlin中的@mentions?

时间:2019-02-28 05:26:50

标签: android regex kotlin

我需要帮助匹配@mentions单词,该单词本身包含一些ID,这些ID将用于将用户重定向到特定的userId。

这是我的字符串:

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

我需要解析的响应==“你好@Akash。@Shubham和你在一起吗?

@Akash和@Shubham的onClick我也需要ID(xxxxx)格式的ID。@ 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 :(得分:1)

您可以使用

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 demo

@\[%user%](\w+)\((\w+)\)正则表达式包含两个用于用户和ID的捕获组。在替换方法中,您可以使用$1$2占位符来引用这些值。

模式详细信息

  • @\[%user%]-一个@[%user%]文字字符串
  • (\w+)-捕获组1(用户$1):一个或多个字母,数字或下划线
  • \(-一个(字符
  • (\w+)-捕获组2(ID,$2):一个或多个字母,数字或下划线
  • \)-一个)字符。