python re.sub group: number after \number

PythonRegexNumbersRegex Group

Python Problem Overview


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'

I think it's a common issue when having something like \number. Can anyone give me a hint on how to handle this?

Python Solutions


Solution 1 - Python

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 will use the substring > matched by the group named name, as > defined by the (?P...) syntax. > \g 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionzhigangView Question on Stackoverflow
Solution 1 - PythonJohn Gaines Jr.View Answer on Stackoverflow