@StickPunk

Как подправить регулярное выражение?

Написал такую регулярку. Но оно почему-то не хочет заменять цифры, если в начале регулярки есть символ "не содержит(^)", хотя если его убрать, то все нахождения по регулярке успешно заменяются (но мне нужно наоборот, чтобы не заменялись цифры, перед которыми есть (True*).

В итоге должна получиться строка print(multiply((((True*1)+(True*1))+0.5), test))

from re import findall, sub


line = """
print(multiply((((True*1)+(True*1))+0.5), 2))
"""

numbers = ["1", "2"]

for item in numbers:
    line = sub(
        r"^(?!\(True\*)\b{}\b".format(item), "test", line
    )

print(line)
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
@PavelMos
В примере есть отдельно 0.5 и в примере в итоге он не тронут. Если и его не менять, регексп надо дополнять.
В примере в регекспе negative lookahead т.е. он смотри чтобы ПОСЛЕ не было совпадения. А True перед числом

from re import findall, sub
line = """
print(multiply((((True*1)+(True*1))+0.5), 2))
"""
numbers = ["1", "2"]
for item in numbers:
    line = sub(
        r"(?<!True\*)\d".format(item), "test", line
    )
print(line)
print(multiply((((True*1)+(True*1))+test.test), test))


про проверки тут неплохо объясняется
https://learn.javascript.ru/regexp-lookahead-lookbehind
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы