2013-02-24 35 views
6
commentary = soup.find('div', {'id' : 'live-text-commentary-wrapper'}) 
findtoure = commentary.find(text = re.compile('Gnegneri Toure Yaya')).replace('Gnegneri  Toure Yaya', 'Yaya Toure') 

टीका Gnegneri टोरे Yaya कि याया टोरे के लिए बदल की जरूरत के विभिन्न उदाहरण हों, पाठ का पता लगाएं।अजगर - का उपयोग कर BeautifulSoup तो मूल सूप चर में बदलने के

findAll() काम नहीं करता है क्योंकि एक सूची है।

मेरी दूसरी समस्या यह है कि यह कोड उन्हें आसानी से पाता है और उन्हें खोजने के लिए एक नए चर में बदल देता है, मुझे उन्हें मूल सूप में बदलने की आवश्यकता है।

मुझे लगता है कि मैं इसे गलत परिप्रेक्ष्य से देख रहा हूं।

+0

@MartijnPieters मुझे आशा है कि आपके पास रात के खाने के लिए एक सुंदर सूप था;), लेकिन अगर आपको याद नहीं है तो मैं आपको दोष नहीं दे सकता। – PascalVKooten

उत्तर

12

आप के साथ जो भी चाहते हैं वो नहीं कर सकते हैं बस.replace()BeautifulSoup documentation on NavigableString से:

आप जगह में एक स्ट्रिंग को संपादित नहीं कर सकते हैं, लेकिन यदि आप किसी अन्य के साथ एक स्ट्रिंग की जगह ले सकता, replace_with() का उपयोग कर।

यही वही है जो आपको करने की ज़रूरत है; उस के साथ प्रत्येक मैच लेते हैं, तो निहित पाठ पर .replace() फोन और मूल को बदलते हैं:

findtoure = commentary.find(text = re.compile('Yaya Toure')) 
:

findtoure = commentary.find_all(text = re.compile('Gnegneri Toure Yaya')) 
for comment in findtoure: 
    fixed_text = unicode(comment).replace('Gnegneri Toure Yaya', 'Yaya Toure') 
    comment.replace_with(fixed_text) 

आप आगे इन टिप्पणियों का उपयोग करना चाहते हैं, तो आप एक नया खोज करने की आवश्यकता होगी

findtoure = commentary.find_all(text = re.compile('Gnegneri Toure Yaya')) 
fixed_comments = [] 
for comment in findtoure: 
    fixed_text = unicode(comment).replace('Gnegneri Toure Yaya', 'Yaya Toure') 
    comment.replace_with(fixed_text) 
    fixed_comments.append(fixed_text) 
:

या, अगर आप सभी की जरूरत है, जिसके परिणामस्वरूप यूनिकोड पाठ (ताकि NavigableString वस्तुओं कनेक्ट नहीं) है, बस fixed_text वस्तुओं को इकट्ठा 210

+0

धन्यवाद आदमी ऐसा लगता है कि चाल चल रही है – user2073606