Regular Expression - Match pattern that does not contain a string

python, regex

Solution

Your syntax for trying to negate part of your pattern is incorrect.

Also, `^` outside of a character class asserts position at the beginning of the string. You need to use a Negative Lookahead assertion and be sure to anchor the entire pattern.

^abc(?:(?!abc).)*abc$

Live Demo

Problem

I'm quite new to regular expression, and have been searching around for away to do this without success. Given a string, I want to remove any pattern that starts with "abc", ends with "abc", and does not contain "abc" in the middle. If I do ``` 'abc.*(abc).*abc' ``` it will match any patter starts with "abc", ends with "abc", and does contain "abc" in the middle. How do I do the opposite. I try ``` 'abc.*^(abc).*abc' ``` but it won't work.

Original source