Split a string based on Pipe delimiter and except inside brackets ()

253 Views Asked by At

I want to split a string by '|' delimiter and exclude those inside the brackets (). I used tokenize function to split by delimiter and have some issue with exclusion part(RegEx format). Please help.

Input: Test|Test1|Test2|(Test3|Test4)|Test5|(Test6)(Test7)|Test8

Output: Test,Test1,Test2,(Test3|Test4),Test5,(Test6)(Test7),Test8

Thanks in advance.

1

There are 1 best solutions below

2
On BEST ANSWER

Perhaps the analyze-string function suffices to break up the string, I don't think the single example makes the rules clear but it would be like

analyze-string('Test|Test1|Test2|(Test3|Test4)|Test5|(Test6)(Test7)|Test8','(\([^)]*\))+')/*
/(if (. instance of element(fn:match)) then data() else tokenize(., '\|'))[normalize-space()]

either => string-join(',') that result or use

declare option output:method 'text';
declare option output:item-separator ',';

analyze-string('Test|Test1|Test2|(Test3|Test4)|Test5|(Test6)(Test7)|Test8','(\([^)]*\))+')/*
/(if (. instance of element(fn:match)) then data() else tokenize(., '\|'))[normalize-space()]