我想找到整个单词的字符串。但是我不知道如何在kotlin中找到所有单词。我的发现词是[非alpha] cba [非alpha]。我的示例代码是波纹管。

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}”。
如何用Kotlin语言找到此值。

最佳答案

您可以使用

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

参见online Kotlin demo

要获取匹配列表,您需要在regex对象上运行findAll方法,将结果映射到值并转换为列表:
.findAll(testLink3).map{it.value}.toList()

要计算比赛次数,您可以使用
matcher.findAll(testLink3).count()

正则表达式演示
  • (?i)-不区分大小写的修饰符
  • (?<!\\p{L})-如果当前位置的左侧紧跟字母
  • ,则匹配失败的负向查找将导致匹配失败
  • $word-您的word变量值
  • (?!\\p{L})-如果当前位置右侧紧邻有字母,则匹配失败的否定前行。
  • 08-24 17:27