python re.sub group: number after number

Question:

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?

Asked By: zhigang

||

Answers:

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.

Answered By: John Gaines Jr.
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.