Hi,
Change your expression to this:
string pattern = "(?=.*\bgoods\b|\bitems\b|\bthings?\b)(?=.*\bbought\b)(?=.*\bid\b)(?=.*\btest\b).*";
Putting a ? after the 's' in 'things?' will catch both thing and things.
You need to have word boundaries around each word in the optional list.
(You also misspelled
goods
as
good
in your user input, but I assume you mean goods.)