如何在Kotlin/Java中用正则表达式解析指定格式键值对?
解决Kotlin/Java中提取数组键值对的正则问题
你的原正则表达式存在几个问题,导致无法精准匹配目标条目:
- 未处理键值对前后的空格
- 负向预查的位置不合理,无法正确界定每个条目的边界
- 未排除值未被单引号包裹的无效条目
修正后的正则表达式
\w+\['(.*?)'\]\s*=\s*'(.*?)'(?=,|\.\.|$)
正则各部分说明:
\w+:匹配数组名称(如someArray1、some)\['(.*?)'\]:捕获单引号包裹的键名到分组1\s*=\s*:匹配等号,兼容前后任意空格'(.*?)':捕获单引号包裹的值到分组2(?=,|\.\.|$):正向预查,确保条目后是逗号、省略号或文本结尾,避免匹配不完整或无效内容
Kotlin 实现示例
fun main() { val input = "someArray1['key1'] = 'value1', someArray2['key2'] = 'value2', ignoreText=ignore, some['key3'] = 'value3', ignoreMe['ignore']=ignore, some['key4'] = 'value4'.." val regex = Regex("""\w+\['(.*?)'\]\s*=\s*'(.*?)'(?=,|\.\.|$)""") regex.findAll(input).forEach { match -> println("${match.groupValues[1]}=${match.groupValues[2]}") } }
Java 实现示例
import java.util.regex.Matcher; import java.util.regex.Pattern; public class KeyValueExtractor { public static void main(String[] args) { String input = "someArray1['key1'] = 'value1', someArray2['key2'] = 'value2', ignoreText=ignore, some['key3'] = 'value3', ignoreMe['ignore']=ignore, some['key4'] = 'value4'.."; Pattern pattern = Pattern.compile("\\w+\\['(.*?)'\\]\\s*=\\s*'(.*?)'(?=,|\\.\\.|$)"); Matcher matcher = pattern.matcher(input); while (matcher.find()) { System.out.printf("%s=%s%n", matcher.group(1), matcher.group(2)); } } }
运行上述代码后,将输出你期望的结果:
key1=value1 key2=value2 key3=value3 key4=value4
内容的提问来源于stack exchange,提问作者Petros Kizaiwe
相关产品推荐
相关产品推荐

