我想找到整个单词的字符串。但是我不知道如何在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})
-如果当前位置右侧紧邻有字母,则匹配失败的否定前行。