value: (.*)(?:, Do not include this)?
---- ~~~~~~~~~~~~~~~~~~~~~~~~
A B
Проблема с вашим выражением состоит в том, что части A разрешено совпадать со всей строкой, а части B необязательно. Движок регулярных выражений, встретив А, просто перейдет к концу строки, с которой он в настоящее время сопоставляется, и поглотит все символы на пути. Затем, сопоставив A, он перейдет к части B выражения, увидев, что оно не может быть сопоставлено (поскольку вся строка уже была использована) и что это необязательно, и, поскольку это конец выражения, остановится эта попытка и объявить совпадение успешным.
Один из способов предотвратить это - сделать ленивую часть A, заставляя выражение соответствовать всей строке, используя привязку конца строки. Например:
value: (.*?)(?:, Do not include this)?$
См. demo .
Вы также можете сделать части A и B настолько отличными друг от друга, что вам не придется беспокоиться о одно совпадение вместо другого. Если применимо, это позволит вам сохранить жадный квантификатор для части A. Например:
value: ([^,]*)(?:, Do not include this)?
Какой способ больше подходит для ваших нужд, зависит от состава строк, с которыми вы сопоставляете.