I need to make a regex (.net flavour) that matches only "sometext" in the following strings (the second line has a space at the end):
sometext
sometext
sometext dsf 2131
sometext-1234
but won't match anything in the following:
sometext 12
sometext 3
sometext2
sometext-1
That is it should match "sometext" only if it is not followed by any number of optional separator characters (like space, "-", "/", ".") and 1 or 2 digits (3 or more digits are fine).
I tried this regex with negative lookahead
sometext($|\W(?!\d{1,2}))
but didn't get too far.
I would use the following negative lookahead approach:
sometext(?!(?:[/.-]|\s*)\d{1,2}\b)
This pattern says to match:
sometext
match literal 'sometext'(?!
lookahead and negatively assert that
(?:[/.-]|\s*)
what follows is not a /.-
separator or zero or more whitespaces\d{1,2}\b
which is then followed by either one or two digits)
end of lookahead