Home > Software engineering >  apply regex to extract a set of character within square and curly braces
apply regex to extract a set of character within square and curly braces

Time:03-28

I have to process some json file in order to flatten it. I am facing challenge in capturing some text pattern using regex, as general flatten libraries won't work on my file. I have to capture "," from within [{"sometext","more_text"}] text in order to replace it with \",\". I tried a lot but cant capture "," my current regex that captures entire bracket text is

\[\{".*?\}\]

Sample json

{"action":"add","actions":[{"country","IND"}],"ctx":"{\"charset\":\"UTF-8\",\"client_id\":\"G9.2.2045341156.1629864410\",\"cookie\":\"1\",\"domain_user\":\"28f51979-bef8-4731-b242-e3a00496d9ba\",\"fp\":\"659810303\",\"id\":\"d368f505-6226-4650-aeba-caf9fb18fc53\",\"page_res\":\"478x4952\",\"refr\"

Example: https://regex101.com/r/vcjPQx/1

Regex should be able to select only one occurance of "," that comes inside square bracket and curly braces.

CodePudding user response:

You can use pattern

(\[\{[^\{\[\]\}]*)(\",\")([^\[\]\{\}]*\}\])

which contains 3 capturing groups. We copy the 1st and 3rd as found and use the pattern.

\1\\\",\\\"\3

which replaces each "," with \",\" .
We use \1 and \3 to copy the 1st and 3rd capturing groups.

https://regex101.com/r/aNHZ04/2

CodePudding user response:

Hit, If understood your problem correctly, I think this regex is your solution:

/{\s*\"[^"] \"\s*(,)\s*\"[^"] \"\s*}/gm

See Test results: https://regex101.com/r/y4ocUT/1

  • Related