Могу ли я ссылаться на число в группе захвата Regex, манипулировать им, а затем заменить его обратно? - PullRequest
0 голосов
/ 07 февраля 2020

Например, у меня есть такая строка:

Hello I am 'v0' to be added

Я хочу изменить ее на

Hello I am 'v1' to be added

Так что я я пытаюсь заменить 'v0', используя ниже:

re.sub(r'(\W)v\d+(\W)', r'\1vnew\2', string)

А потом теперь я получаю

Hello I am 'vnew' to be added

Но тогда я не здесь не знают, как манипулировать числами.

Очевидно, re.sub(r'(\W)v(\d+)(\W)', rf'\1v{int(\2)+1}\3', string) не работает, потому что SyntaxError: f-string expression part cannot include a backslash.

Любая идея, кроме выполнения этих действий в отдельных шагах, то есть захвата числа, добавления его и изменения перед строкой re.sub()?

1 Ответ

2 голосов
/ 07 февраля 2020

Вы можете увеличить совпадающее число, используя лямбда-функцию для замены значения. Обратите внимание, что вы также можете упростить код, используя обходные пути, чтобы избежать сопоставления чего-либо, кроме цифр после v:

import re

s = 'Hello I am \'v0\' to be added'
s = re.sub(r'(?<=\Wv)\d+(?=\W)', lambda m: str(int(m.group(0)) + 1), s)
print(s)

Вывод

Hello I am 'v1' to be added
...