Ik heb een simpele use-case die ik dacht wel even met een regular expression op te lossen, maar tot nu toe kom ik er niet uit. Uitgaande van een string met comma separated values, bijvoorbeeld:
"deze tekst,bevat komma's escaped met backslash,zoals wie\, wat en waar"
Ik wil de tekst splitten op komma's, waarbij komma's escaped met een backslash (de komma na "wie" bijv.) niet mee moeten tellen.
Dus na de split moet er dit uitkomen:
deze tekst
bevat komma's escaped met backslash
zoals wie\, wat en waar
en niet:
deze tekst
bevat komma's escaped met backslash
zoals wie\
wat en waar
Java's String.split pakt een regex als param, dus ik dacht aan zoiets als dit:
[^\\],
oftewel alle komma's die niet vooraf gegaan worden door een backslash.
Dit werkt bijna, er komt dit uit:
deze teks
bevat komma's escaped met backslas
zoals wie\, wat en waar
De laatste letter van alle delen behalve het laatste deel valt weg.
Ik snap waarom, namelijk omdat het eerste deel van mijn regex alle karakters matched behalve de backslash. De 't' aan het eind van 'deze tekst' wordt dus opgevat als deel van het separator symbool.
Wat ik eigenlijk wil is alleen de komma matchen, en dan ook alleen als ie niet vooraf gegaan wordt door een backslash... ik moet dus op de een of andere manier aangeven dat het eerste deel van de expressie geen onderdeel van de match moet worden... maar ik ben helemaal de weg kwijt met greedy en reluctant en possesive quantifiers en caopturing groups e.d...
Kan iemand me helpen?
"deze tekst,bevat komma's escaped met backslash,zoals wie\, wat en waar"
Ik wil de tekst splitten op komma's, waarbij komma's escaped met een backslash (de komma na "wie" bijv.) niet mee moeten tellen.
Dus na de split moet er dit uitkomen:
deze tekst
bevat komma's escaped met backslash
zoals wie\, wat en waar
en niet:
deze tekst
bevat komma's escaped met backslash
zoals wie\
wat en waar
Java's String.split pakt een regex als param, dus ik dacht aan zoiets als dit:
[^\\],
oftewel alle komma's die niet vooraf gegaan worden door een backslash.
Dit werkt bijna, er komt dit uit:
deze teks
bevat komma's escaped met backslas
zoals wie\, wat en waar
De laatste letter van alle delen behalve het laatste deel valt weg.
Ik snap waarom, namelijk omdat het eerste deel van mijn regex alle karakters matched behalve de backslash. De 't' aan het eind van 'deze tekst' wordt dus opgevat als deel van het separator symbool.
Wat ik eigenlijk wil is alleen de komma matchen, en dan ook alleen als ie niet vooraf gegaan wordt door een backslash... ik moet dus op de een of andere manier aangeven dat het eerste deel van de expressie geen onderdeel van de match moet worden... maar ik ben helemaal de weg kwijt met greedy en reluctant en possesive quantifiers en caopturing groups e.d...
Kan iemand me helpen?