我用一个可重复的分隔符来分割一个字符串,并且还打算保留分隔符。
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]
[, x, x, ooooooo, x, x, o, x, o, x, ooooo]
[xx, ooooooo, xx, o, x, o, x, ooooo]
gcuhipw91#
val str = "xxoooooooxxoxoxooooo" val reg = Regex("o+|x+").findAll(str).map { it.value }.toList() println(reg) //[xx, ooooooo, xx, o, x, o, x, ooooo]
9gm1akwq2#
实际上,使用它是不正确的 + 量词在java的regex模式的lookback中,这不是一个文档支持的特性。它不会抛出异常,因为它在内部被转换为 {1,0x7FFFFFFF} java的regex支持宽度受限的lookback模式。但是,lookbehind和lookahead中的量词没有区别,因为它们是非消耗模式,regex引擎仍然检查字符串中的每个位置是否有模式匹配。你可以用
+
{1,0x7FFFFFFF}
(?<=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]
2条答案
按热度按时间gcuhipw91#
9gm1akwq2#
实际上,使用它是不正确的
+
量词在java的regex模式的lookback中,这不是一个文档支持的特性。它不会抛出异常,因为它在内部被转换为{1,0x7FFFFFFF}
java的regex支持宽度受限的lookback模式。但是,lookbehind和lookahead中的量词没有区别,因为它们是非消耗模式,regex引擎仍然检查字符串中的每个位置是否有模式匹配。你可以用
查看kotlin演示: