import java.util.* val pattern = """%NAME(\d+)%""".toRegex() fun String.replaceWithNames(names: List): String { return pattern.replace(this) { m -> names.getOrNull(m.groupValues[1].toInt()) ?: m.value } } fun main(args: Array) { val lst = listOf("Bob", "Alice", "Tom") println( "Lorem ipsum %NAME0% dolor sit amet %NAME1%, consectetur %NAME2% adipiscing elit. Wrong %NAME11%".replaceWithNames(lst) ) }