python re.sub grubu: \ sayıdan sonraki sayı


183

Nasıl değiştirebilirsiniz foobarile foo123bar?

Bu işe yaramaz:

>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'

Bu çalışıyor:

>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'

Sanırım böyle bir şey olduğunda yaygın bir sorun \number. Birisi bana bununla nasıl başa çıkacağına dair bir ipucu verebilir mi?


2
Bu soru, "Gruplar" altında Yığın Taşması Düzenli İfade SSS'ye eklenmiştir .
aliteralmind

1
Bu soruyu bulmam oldukça uzun sürdü, çünkü 'yakalama grubu' veya 'numaralı grup referansı' terimlerini içermiyor, ama sonunda buradayım ve sorduğunuza sevindim.
Mark Ch

1
Sorununuz '112 \' dizisi birleştirme veya önce değerlendirilir almak için \ 1 ' 'geribaşvuru zorlamak nasıl göremiyorum, ya ondalık 74.' sekizlik düz 0112, ASCII'J olarak yorumlanır oluyor o r''.join()
SMCI

sorudan küçük bir sapma, tüm grup eşleşmelerini ifade etmenin herhangi bir yolu yani tüm eşleşmeler için r '\ <> hi'?
Sayan Dey

Yanıtlar:


313

Cevap:

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

Dokümanlardan ilgili alıntı:

Yukarıda açıklandığı gibi karakter çıkışlarına ve geri başvurularına ek olarak, \ g, (? P ...) sözdizimi ile tanımlandığı gibi, name adlı grupla eşleşen alt dizeyi kullanır. \ g ilgili grup numarasını kullanır; \ g <2> bu nedenle \ 2 ile eşdeğerdir, ancak \ g <2> 0 gibi bir değiştirmede belirsiz değildir. \ 20, grup 2'ye bir referans değil onu takip eden '0' karakteri olarak grup 20'ye referans olarak yorumlanır. REg ile eşleşen tüm alt dizgideki geri başvuru yerine geçer.


48
Kendinize bu kadar zor olma. Bu oluyor belgelerinde gömülü şimdiye kadar derin onların soru google ve bu cevap SO üzerinde gelmelerini olmadığı kadar çoğu insan dokümanlar okumak için çok daha fazla zaman alacağını.
Speedplane

1
Bağlam arıyorsanız , verilen tam alıntı burada bulunabilir
patrick

Grubu alıp değiştirebilir miyim? \ g <1> ... Örneğin bu durumda g <1> foo, ama u "u" ile değiştirmek istiyorum, bu "fuu" gibi
Eric Bellet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.