python re.sub group: number after \number

numbers, python, regex, regex-group

Solution

The answer is:

re.sub(r'(foo)', r'\g<1>123', 'foobar')

Relevant excerpt from the docs:

In addition to character escapes and backreferences as described above, `\g<name>` will use the substring matched by the group named `name`, as defined by the `(?P<name>...)` syntax. `\g<number>` uses the corresponding group number; `\g<2>` is therefore equivalent to `\2`, but isn’t ambiguous in a replacement such as `\g<2>0`. `\20` would be interpreted as a reference to group 20, not a reference to group 2 followed by the literal character `'0'`. The backreference `\g<0>` substitutes in the entire substring matched by the RE.

Problem

How can I replace `foobar` with `foo123bar`? This doesn't work: ``` >>> re.sub(r'(foo)', r'\1123', 'foobar') 'J3bar' ``` This works: ``` >>> re.sub(r'(foo)', r'\1hi', 'foobar') 'foohibar' ```

Original source

Related problems