Search code examples
groovy

How to define the regex for a string to separete key,value pair


I am trying to divide a string into key:value pair in groovy but since my key has multiple values i am not able to acheieve the right result . It just prints the first value

I am trying below

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 value = match[2]

    println key 
    println value 

}

when i print the key and value i only don't get the right results. I want to separate each key,value pair like

key1:value1,value2
key2:value1,value2
key3:value1

is there another way to do this in groovy ?


Solution

  • You could maybe use this:

    def keyValueString = "key1:value1,value2,key2:value1,value2,value3,key3:value1"
    
    def regex = /((.+?):([^:]+)(?:,|$))/
    
    def matcher = keyValueString =~ regex
    
    matcher.each { match ->
        println "${match[2]} maps to ${match[3]}"
    }
    

    Which prints:

    key1 maps to value1,value2
    key2 maps to value1,value2,value3
    key3 maps to value1