Groovy中如何用正则拆分含多值的键值对?
在Groovy中拆分含多值的键值对字符串
你的正则表达式因匹配逻辑问题,无法正确捕获键对应的所有值。这里提供两种可行的实现方法:
方法一:修正正则表达式
通过正向前瞻精准匹配每个键对应的所有值,直到下一个键的开头或字符串结尾:
def keyValueString = "key1:value1,value2,key2:value1,value2,value3,key3:value1" def regex = /([^:,]+):((?:[^,]+,)*(?:[^,]+))(?=,[^:,]+:|$)/ def matcher = keyValueString =~ regex matcher.each { match -> def key = match[1] def values = match[2] println "$key:$values" }
正则说明:(?=,[^:,]+:|$)是正向前瞻断言,确保捕获的内容后接下一个键(,key:格式)或字符串结尾,从而完整获取当前键的所有值。
方法二:分步拆分(更易读)
先拆分出独立的键值对单元,再分别提取键和值,逻辑更直观:
def keyValueString = "key1:value1,value2,key2:value1,value2,value3,key3:value1" // 按"key:"模式前的位置拆分,得到单个键值对单元 def keyValuePairs = keyValueString.split(/(?=[^:,]+:)/) keyValuePairs.each { pair -> if (pair) { // 仅按第一个冒号拆分,避免值中含冒号时出错 def (key, values) = pair.split(':', 2) println "$key:$values" } }
内容的提问来源于stack exchange,提问作者jarvis_max
相关产品推荐
相关产品推荐

