val list = """ a,234,97654/ b,23,ABC, b,44235,203 a,234,97654/ b,23,ABC b,44235,203 49,234 39,9291 """.trimIndent().split("\n") fun List.splitBy(pred : (A) -> Boolean) : List> { if(size == 0) return listOf() val loc = indexOfLast(pred) if(loc == -1) return listOf(this) return subList(0, loc).splitBy(pred) + listOf(subList(loc, size)) } fun cond(s : String) : Boolean = s.startsWith("a") && s.endsWith("/") list.splitBy(::cond) .map { l-> l.takeWhile { s -> s.startsWith("b") || cond(s) }.joinToString("") }