Desire to create a regex to match the left side of an expression that is comma-separated as follows, preferably ignoring any whitespace:
abc = a1, def = b2, ghi = c3
Expression would match abc def and ghi
Have used this regex so far (?<=,).*?(?=\=), however it doesn't match the first value and does not ignore whitespace.
CodePudding user response:
Your pattern does not match the first value because the positive lookbehind (?<=,) asserts a comma to the left which is not there for the first value in the example string.
The pattern does not ignore whitespace because in this part .*?(?=\=) the "dot star" can match (including spaces) to the point that the assertion (?=\=) is true.
One option to get the first value is to use a capture group and match the pattern that follows ending either on a comma or assert the end of the string.
(\w )\s =\s \w (?:,|$)
Explanation
(\w )Capture 1 word characters in group 1\s =\sMatch=between whitespace chars\wMatch 1 word characters(?:,|$)Match either a comma or assert the end of the string
CodePudding user response:
This seems to work:
\w (?= =)
See live demo.
In English, words characters the are followed by " =".
