You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:45:31