I have two string like below..I want to split those string on space but ignore space if space found inside quotes....
LA L'TL0BPC,C'ABC ' THIS IS COMMENT
LA C'TL0PC',C'ABC ' THIS IS COMMENT
MVC EBW000(4),=C'MPI ' THIS IS ANOTHER' CASE
I want to split those lines like this
LA L'TL0BPC,C'ABC ' THIS IS COMMENT
LA C'TL0PC',C'ABC ' THIS IS COMMENT
How to achieve this using java regex....Any other solution is also acceptable..
I have tried this:
String ODD_QT_REGEX="[ ]+(?=([^'']*'[^'']*')*[^'']*)";
String EVEN_QT_REGEX="[ ]+(?=([^'']*'[^'']*')*[^'']*$)";
but this doesn't do what I need.
You could do matching instead of splitting. Splitting according to this "[ ]+(?=([^'']*'[^'']*')*[^'']*)"; regex is possible only if your input has balanced quotes.
Seems like i figured out the problem. Same like the op's regex but this regex won't consider an apostrophe as a single quote. The below regex would match one or more space characters which is followed by
\b'\b An apostrophe.| OR'[^']' single quote block.| OR[^'] Any character but not of single quote.(?:\\b'\\b|'[^']*'|[^'])*, zero or more times. Then it must be followed by an end of the line anchor.Code:
String r = "LA L'TL0BPC,C'ABC ' THIS IS COMMENT";
String[] m = r.split("\\s+(?=(?:\\b'\\b|'[^']*'|[^'])*$)");
System.out.println(Arrays.toString(m));
OR
For more exact case, you could replace \b in the above regex with lookarounds.
"\\s+(?=(?:(?<=[a-zA-Z])'(?=[A-Za-z])|'[^']*'|[^'])*$)"
Output:
[LA, L'TL0BPC,C'ABC ', THIS, IS, COMMENT]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With