Числовое значение непосредственно после обратной ссылки

Я пытаюсь использовать re.sub для строки с числовым значением непосредственно после числовой re.sub . То есть, если мое значение замены составляет 15.00 а мой backreference равен \1 , моя строка замены будет выглядеть так:

\115.00 , который, как ожидается, вызовет error: invalid group reference потому что думает, что моя группа backreference – 115 .

Пример:

 import re r = re.compile("(Value:)([-+]?[0-9]*\.?[0-9]+)") to_replace = "Value:0.99" # Want Value:1.00 # Won't work: print re.sub(r, r'\11.00', to_replace) # Will work, but don't want the space print re.sub(r, r'\1 1.00', to_replace) 

Есть ли решение, которое не включает в себя больше, чем re.sub ?

One Solution collect form web for “Числовое значение непосредственно после обратной ссылки”

Используйте однозначный синтаксис обратной ссылки \g<1> . См. re.sub :

\g<number> использует соответствующий номер группы; \g<2> , следовательно, эквивалентно \2 , но не является неоднозначным в замене, например \g<2>0 . \20 будет интерпретироваться как ссылка на группу 20 , а не на ссылку на группу 2, за которой следует буквальный символ «0».

См. Эту демо-версию regex .

Демо-версия Python :

 import re r = re.compile("(Value:)([-+]?[0-9]*\.?[0-9]+)") to_replace = "Value:0.99" # Want Value:1.00 print(re.sub(r, r'\g<1>1.00', to_replace)) # => Value:1.00 
  • Получение шаблона обратно из скомпилированного re?
  • Почему флаг ignorecase (re.I) не работает в re.sub ()
  • sre_constants.error: ничего не повторять
  • Не работаю для меня
  • Как заменить запятые в строке
  • Найти первые совпадения x с re.findall
  • Несколько групп Python RegEx
  • Регулярное выражение Python: сопоставление скобок в скобках
  • Использование regEx для удаления цифр из строки
  • Различное поведение между re.finditer и re.findall
  • Python Regex Split хранит разделительные шаблоны
  • Python - лучший язык программирования в мире.