println(Regex("(A|B)+").matchEntire("AB")!!.groupValues)
打印[AB, B]
但我希望结果为[AB, A, B]
。
[AB, A, B]
?答案 0 :(得分:2)
您获得的输出是预期的。 (A|B)+
匹配并捕获A
,将匹配值放入第1组缓冲区,然后捕获B
(因为+
匹配一次或多次)并且放置价值进入第1组重写 A
内部。
因此,获得所需内容的唯一方法是捕获 A
或B
,但这并不容易。
见
println(Regex("(?:(A)|(B))+").matchEntire("AB")!!.groupValues)
请参阅Kotlin demo。
输出[AB, A, B]
,因为整个字符串与正则表达式匹配,该值被添加为第一项,Capture 1被添加为第二项,Capture 2是第三项。
但是,如果你有一个更长的字符串,例如123abc456def
而你有(?:(\d+)|(\p{L}+))+
,那么就是will lose all the captures but last。因此,对于123abc456def
输入,您将获得[123abc456def, 456, def]
。
但是,如果需要匹配此类字符串,则应提供更多详细信息。