4

when I use negative lookahead on this string

1pt 22px 3em 4px

like this

/\d+(?!px)/g

i get this result

(1, 2, 3)

and I want all of the 22px to be discarded but I don't know how should I do that

1
  • If the letters are there all the time, just use \d+(?!px)[a-z]+ Commented Apr 3, 2017 at 20:30

1 Answer 1

5

Add a digit pattern to the lookahead:

\d+(?!\d|px)

See the regex demo

This way, you will not allow a digit to match after 1 or more digits are already matched.

Another way is to use an atomic group work around like

(?=(\d+))\1(?!px)

See the regex demo. Here, (?=(\d+)) captures one or more digits into Group 1 and the \1 backreference will consume these digits, thus preventing backtracking into the \d+ pattern. The (?!px) will fail the match if the digits are followed with px and won't be able to backtrack to fetch 2.

Both solutions will work with re.findall.

Sign up to request clarification or add additional context in comments.

1 Comment

See the Python demo. Remember to use raw string literals when (r'pattern') when declaring regex patterns.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.