Reputation: 1469
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.
Upvotes: 2
Views: 67
Reputation: 163297
You could make use of \W
adding it to the negative lookahead:
sometext(?!\W*\d{1,2}\b)
See a regex 101 demo
Note that \W
matches a non word character, which is more than only -
/
.
If you don't want to match 0 or more separators being one of -
/
.
you might also use:
sometext(?![\s/.-]*\d{1,2}\b)
See another regex 101 demo
Upvotes: 1
Reputation: 521194
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 lookaheadUpvotes: 1
Reputation: 87
Try this one
^sometext(?![\s\-\/\.]?\d{1,2})(?!\d)
Regex explanation:
Upvotes: 1