我用一个可重复的分隔符来分隔字符串,还打算保留分隔符。
val str = "xxoooooooxxoxoxooooo"
val reg = Regex("(?<=x+)|(?=x+)")
var list = str.split(reg)
println(list)
输出是[, x, x, ooooooo, x, x, o, x, o, x, ooooo]
,尽管我想得到
[xx, ooooooo, xx, o, x, o, x, ooooo]
val str = "xxoooooooxxoxoxooooo"
val reg = Regex("o+|x+").findAll(str).map { it.value }.toList()
println(reg)
//[xx, ooooooo, xx, o, x, o, x, ooooo]
实际上,在Java的正则表达式模式中的查找表中使用+
量词是不正确的,这不是一个文档支持的功能。它不会抛出异常,因为它在内部被转换为{1,0x7FFFFFFF}
,并且Java的regex支持宽度受限的lookbacking模式。然而,lookbehind和lookahead中的这个量词没有什么区别,因为它们是非消耗模式,regex引擎仍然会检查字符串中的每个位置是否匹配模式。
你可以使用
(?<=x)(?=o)|(?<=o)(?=x)
查看Kotlin演示:
val str = "xxoooooooxxoxoxooooo"
val reg = Regex("(?<=x)(?=o)|(?<=o)(?=x)")
var list = str.split(reg)
println(list)
// => [xx, ooooooo, xx, o, x, o, x, ooooo]