I want to Split a String delimited by '|'. But want to ignore a String value that has '|'. Find below example:
String s = "Shashank|Sam|Location|20246|India|City in India|USA Country|Location|India Specific 2021|25236|A";
I want to consider Location|India Specific 2021 as one value.
Expected Output:
Shashank
Sam
Location
20246
India
City in India
USA Country
Location|India Specific 2021
25236
A
Whenever I find Location|India in String, I want to ignore | in that.
I tried using
(?<!Location|India)\|
But output is
Shashank
Sam
Location|20246
India
City in India
USA Country
Location|India Specific 2021
25236
A
Thanks
CodePudding user response:
You can use this regex with a negative lookahead with a nested lookbehind:
\|(?!(?<=Location\|)India )
RegEx Details:
\|: Match a|(?!: Start negative lookahead(?<=Location\|): Make sure that we haveLocation|before current positionIndia: MatchIndia
): End negative lookahead
CodePudding user response:
(?<!\bLocation)\||\|(?!India\b)
This regular expression matches a pipe character (\|) that is not preceded by 'Location' or (|) a pipe character that is not followed by 'India'. (?<!\bLocation) is a negative lookbehind; (?!India\b) is a negative lookahead.
The word boundary (\b) following 'India' is to permit a match of '|' in (for example) 'Location|Indiana' (similar for the word boundary before 'Location').
