如何在python正则表达式中替换部分组?

时间:2018-11-27 22:16:52

标签: regex python-3.x

我有一个正则表达式

(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函数,但是我只知道如何替换整个而不是部分替换组。

谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

感谢您的回答和建议:

我为将来的用户实现了以下目标:

re.sub(regex, r'\1: \2;', str)
re.sub(regex, r'\3: \4;', str)