Kotlin正则替换如何保留匹配文本的大小写?
实现保留大小写的单次正则替换方案
可以通过Kotlin正则的带lambda的replace方法实现,不用拆分多个替换逻辑,核心思路是匹配目标单词时忽略大小写,再根据原匹配文本的大小写特征动态生成替换内容:
基础版本(处理首字母大小写)
fun replaceText(aText: String): String { // 忽略大小写匹配"gonna"单词 val targetRegex = """\bgonna\b""".toRegex(RegexOption.IGNORE_CASE) return targetRegex.replace(aText) { match -> val originalWord = match.value val baseReplacement = "going to" // 原单词首字母大写,替换后也首字母大写;否则用小写替换文本 if (originalWord.first().isUpperCase()) { baseReplacement.replaceFirstChar { it.uppercase() } } else { baseReplacement } } }
扩展版本(兼容全大写场景)
如果要处理全大写的"GONNA"并替换为"GOING TO",可以再加一层判断:
fun replaceText(aText: String): String { val targetRegex = """\bgonna\b""".toRegex(RegexOption.IGNORE_CASE) return targetRegex.replace(aText) { match -> val originalWord = match.value val baseReplacement = "going to" when { originalWord.all { it.isUpperCase() } -> baseReplacement.uppercase() originalWord.first().isUpperCase() -> baseReplacement.replaceFirstChar { it.uppercase() } else -> baseReplacement } } }
原理说明
- 用
RegexOption.IGNORE_CASE让正则一次性匹配所有大小写变体的目标单词 - 替换时通过lambda获取原匹配的文本,根据它的大小写格式调整替换内容
- 不管是句首大写、全小写还是全大写的情况,都能一次处理完成
内容的提问来源于stack exchange,提问作者Jesser
相关产品推荐
相关产品推荐

