Reputation: 55
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
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