如何在Python正则表达式中替换部分匹配组?

4

我有一个正则表达式

(obligor_id): (\d+);(obligor_id): (\d+):

以下是一个示例匹配:
Match 1
Full match  57-95   `obligor_id: 505732;obligor_id: 505732:`
Group 1.    57-67   `obligor_id`
Group 2.    69-75   `505732`
Group 3.    76-86   `obligor_id`
Group 4.    88-94   `505732`

我要尝试部分替换完全匹配项为以下内容:

obligor_id: 505732;obligor_id: 505732: -> obligor_id: 505732;

有两种方法可以实现,

  1. 用空字符串替换第3组和第4组

  2. 用空字符串替换第1组和第2组,然后将第4组替换为(\d+);

如何在Python中实现这两个方法?我知道有一个re.sub函数,但是我只知道如何替换整个匹配项,而不是部分替换组。

提前感谢。


1
为什么(obligor_id)需要成为一个组?你只是替换重复的id吗?如果是这样,请考虑用"obligor_id: " + match.group(1)替换整行匹配obligor_id: (\d+);obligor_id: \1 - 9000
2
使用 re.sub 函数,将你的模式和 r'\1: \2;' 替换字符串传入。请参考 正则表达式演示 - Wiktor Stribiżew
2个回答

2

您可以更改捕获组并在替换字符串中引用它们:

s = 'obligor_id: 505732;obligor_id: 505732:' 
re.sub(r'(obligor_id: \d+;)(obligor_id: \d+:)', r'\1', s)
# => 'obligor_id: 505732;

在替换字符串中使用数字变量,可以使用命名引用语法:re.sub(pat, r'\g<1>'+ f'{my_number}', str) - aksh1618

1
感谢您的答案和建议:
以下是我为未来用户实现它们的方法:
re.sub(regex, r'\1: \2;', str)
re.sub(regex, r'\3: \4;', str)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接