2010-10-22 23 views
46

Bir dizenin bir kısmını değiştirmem gerekiyor. Python belgelerine bakıyordum ve re.sub'u buldum. Python: Regex ile değiştir

import re 
s = '<textarea id="Foo"></textarea>' 
output = re.sub(r'<textarea.*>(.*)</textarea>', 'Bar', s) 
print output 

>>>'Bar' 

Bu '<textarea id="Foo">Bar</textarea>' değil 'bar' yazdırmaya bekliyordum.

Herkes bana neyi yanlış yaptığımı söyleyebilir mi? Bunun yerine tutmak size istediğiniz bölümlerini yakalamak ve daha sonra ikame dize ekleyene bir başvuru \1 kullanarak onlara başvurabilirsiniz yerine sen istediğiniz bölümünü yakalama

+3

zamanki öneri HTML için normal ifadeler kullanabilirsiniz değil olmasıdır. Bu sitede uzun süredir devam eden bir yanıt, bununla sonuçlanan bazı klasik cevaplar. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – hughdbrown

+0

Evet, gerçekten küçük bir parça olduğu için BeautifulSoup'a geçtiği için regex kullanmayı düşünüyordu. yerine. – Pickels

cevap

79

.

yerine bu deneyin: Ayrıca

output = re.sub(r'(<textarea.*>).*(</textarea>)', r'\1Bar\2', s) 

, bu örneğin Beautiful Soup için, bu görev için bir HTML ayrıştırıcı kullanmayı düşünmelisiniz HTML olduğunu varsayarak.

+0

Sanırım "r '\ 1Bar \ 3'" demek istiyorsunuz. – nmichaels

+5

@Nathon - '3' eşleşmesi yok. Sadece iki tanesi parantez içinde ... – eumiro

+0

Aha, anladım. Çok teşekkürler Mark. – Pickels

1

Ya da sadece yerine arama işlevini kullanabilirsiniz:

match=re.search(r'(<textarea.*>).*(</textarea>)', s) 
output = match.group(1)+'bar'+match.group(2) 
print output 
>>>'<textarea id="Foo">bar</textarea>'