I’m using Clojure, so this is in the context of Java regexes.
Here is an example string:
{:a "ab,cd, efg", :b "ab,def, egf,", :c "Conjecture"}
The important bits are the commas after each string. I’d like to be able to replace them with newline characters with Java’s replaceAll method. A regex that will match any comma that is not surrounded by quotes will do.
If I’m not coming across well, please ask and I’ll be happily to clarify anything.
edit: sorry for the confusion in the title. I haven’t been awake very long.
String: {:a "ab, cd efg",} <– In this example, the comma at the end would be matched, but the ones inside the quote would not.
String: {:a 3, :b 3,} <– Every single comma matches.
String {:a "abcd,efg" :b "abcedg,e"} <– Every single comma doesn’t match.
The regex:
Matches:
and:
and does not match a comma in:
But when escaped quotes can appear, like so:
then a regex solution won’t work.
A brief explanation of the regex:
In other words: match any comma that has zero, or an even number of quotes ahead of it (until the end of the string).