18
commentary = soup.find('div', {'id' : 'live-text-commentary-wrapper'})
findtoure = commentary.find(text = re.compile('Gnegneri Toure Yaya')).replace('Gnegneri      Toure Yaya', 'Yaya Toure')

Commentary contains various instances of Gnegneri Toure Yaya that need changing to Yaya Toure.

findAll() doesn't work as findtoure is a list.

The other problem I have is this code simply finds them and replaces them into a new variable called findtoure, I need to replace them in the original soup.

I think I am just looking at this from the wrong perspective.

4

1 に答える 1

22

だけ ではやりたいことができません.replace()。次のBeautifulSoupドキュメントからNavigableString

文字列をその場で編集することはできませんが、を使用して1つの文字列を別の文字列に置き換えることができますreplace_with()

それはまさにあなたがしなければならないことです。それぞれの一致を取得し、含まれているテキストを呼び出し.replace()て、元のテキストを次のように置き換えます。

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

これらのコメントをさらに使用したい場合は、新しい検索を行う必要があります。

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

または、必要なのが結果の文字列だけである場合(つまり、オブジェクトに接続されたままのstrオブジェクトではなく、Pythonオブジェクト)、オブジェクトを収集するだけです。NavigableStringBeautifulSoupfixed_text

findtoure = commentary.find_all(text = re.compile('Gnegneri Toure Yaya'))
fixed_comments = []
for comment in findtoure:
    fixed_text = comment.replace('Gnegneri Toure Yaya', 'Yaya Toure')
    comment.replace_with(fixed_text)
    fixed_comments.append(fixed_text)
于 2013-02-24T21:07:57.890 に答える