代码之家  ›  专栏  ›  技术社区  ›  Pythoner

如何替换python regex中的部分组?

  •  2
  • Pythoner  · 技术社区  · 6 年前

    我有一个正则表达式

    (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: -gt; obligor_id: 505732;

    实现这一目标的两种方法,

    1. 将组3和4替换为空字符串

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

    如何在Python中实现这2个目标?我知道有一个re.sub函数,但我只知道如何替换整个函数,而不知道如何部分替换组。

    事先谢谢。

    2 回复  |  直到 6 年前
        1
  •  2
  •   mrzasa    6 年前

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

    s = 'obligor_id: 505732;obligor_id: 505732:' 
    re.sub(r'(obligor_id: \d+;)(obligor_id: \d+:)', r'\1', s)
    # => 'obligor_id: 505732;
    
        2
  •  1
  •   Pythoner    6 年前

    感谢您的回答和建议:

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

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