Паттерн для поиска чисел, которые не находятся внутри конкретной подстроки

Мне требуется найти все числа с помощью re.findall, будь то дробные или целые, но они не должны находится внутри скобок factorial(). Я пробовал паттерн (?<!factorial\()(?<!\.)(?:\d+(?:\.\d+)?), но если перед или после запятой больше 1 цифры, то это не работает


Ответы (1 шт):

Автор решения: strawdog

Возможно, проще не заморачиваться со сложными паттернами с lookahead и т. д. - легко ошибиться и не все случаи можно предусмотреть? да и затратно это. Может, сначала просто избавиться от факториалов в строке, а потом найти то, что нужно?

import re

a = "12.4 - factorial(5) + (15.7)-factorial(1.14) -3"
res = re.findall(r"[0-9.]+", re.sub(r"factorial\([^\)]+\)", "", a))
print(res)

['12.4', '15.7', '3']

→ Ссылка