astro
astro

Reputation: 55

python regex negative lookahead

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

Upvotes: 4

Views: 4427

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626826

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.

Upvotes: 5

Related Questions