如何用数字和捕获组替换字符串?

时间:2019-07-09 08:39:54

标签: regex python-3.x

我有一个包含要替换为另一个数字的数字的字符串,并保留其余字符串。

例如

原始= VAR token 3

修改= 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',并且没有组11

如何在替换字符串中与组标识符分开定义文字数字?

1 个答案:

答案 0 :(得分:0)

这是一种方法。

例如:

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