python 替换捕获组值

python replace capture group value

我正在尝试使用 python 代码将字符值 'K' 替换为以下代码片段中的 'M',但运气不佳。

代码:

import re

original_text = 'context PQ-4662-33-K64C-C-DDxxx-Sxxxx'
regex = re.compile(r'context\s.*\d[0-9]\-\w\w\-(K).*')
result = re.match(regex, original_text)
replace_attempt = regex.sub(r'M', original_text)

print(result.group(0))
print(result.group(1))
print(replace_attempt)

输出:

context PQ-4662-33-K64C-C-DDxxx-Sxxxx
K
MK

Process finished with exit code 0

我正在寻找的期望输出:

context PQ-4662-33-M64C-C-DDxxx-Sxxxx

替换为所需的组

original_text = 'context PQ-4662-33-K64C-C-DDxxx-Sxxxx'
original_text=re.sub(r'(context\s.*\d[0-9]\-\w\w\-)(K)(.*)',r''+'M'+r'',original_text)
print(original_text) #'context PQ-4662-33-M64C-C-DDxxx-Sxxxx'

如果你只是想用M替换所有`K

re.sub('K','M',original_text)

如果您只想将 K 替换为 M,那么您只需执行以下任一操作即可:

1) re.sub('K', 'M', original_text)

2) original_text.replace('K', 'M')

两者都会产生:

context PQ-4662-33-M64C-C-DDxxx-Sxxxx

如果您的要求更具体,并且输入字符串始终遵循规定的模式:

re.sub(r'(?<=context [A-Z]{2}-\d{4}-\d{2}-)[A-Z]', 'M', original_text)

再次产生:

context PQ-4662-33-M64C-C-DDxxx-Sxxxx