Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python regex negative lookahead

Tags:

python

regex

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

like image 261
astro Avatar asked Oct 20 '25 15:10

astro


1 Answers

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.

like image 161
Wiktor Stribiżew Avatar answered Oct 23 '25 06:10

Wiktor Stribiżew



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!