Как заменить строку цифрой и группой захвата? - PullRequest
2 голосов
/ 09 июля 2019

У меня есть строка, содержащая цифру, которую я хочу заменить другой, и оставшаяся часть строки сохраняется.

Например,

original = VAR token 3

ified = VAR token 1 // orig = 3

token может быть любой строкой, оператор всегда начинается с VAR и содержит пробел между token и его значением.

Я используюэта функция и регулярное выражение

import re

def modify(line, token, new_value):
    newline = re.sub(r'(^(\s*VAR\s*%s\s+)(\d+)(.*)' % token, r'\1%s // orig = \2\3' % new_value, line)
    print(newline)

Я получаю сообщение об ошибке при запуске этого кода с

modify("VAR T    3", "T", "1")

Traceback (most recent call last):
  File "/usr/local/python/3.4.3_wTclTk/lib/python3.4/sre_parse.py", line 866, in expand_template
    literals[index] = s = g(group)
IndexError: no such group

<Stack Trace>
sre_constants.error: invalid group reference

Я предполагаю, что это потому, что строка замены на самом деле становится r'\11 // orig = \2\3', и нетgroup 11.

Как определить буквенную цифру отдельно от идентификатора группы в строке замены?

1 Ответ

0 голосов
/ 09 июля 2019

Это один подход.

Пример:

import re

def modify(line, token, new_value):
    newline = re.sub(r'^(VAR\s*)({}\s*)(\s+)(\d+)'.format(token), r'\1\2 {} // orig = \4'.format(new_value), line)
    print(newline)

modify("VAR T    3", "T", "1")

Выход:

VAR T    1 // orig = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...