seasp...@gmail.com wrote: > I need to replace all tag <b> with <span> after ■. But the result from > below is '■ <span style="REPLACE">D</span> / <font></font>' > Can you explain what I did wrong, please. > > s = '■<b>A</b> <b>B</b> <b>C</b> <b>D</b> / <font></font>' > soup = BeautifulSoup(s) > for i in soup.find_all(text='■'): > tag = soup.new_tag('span') > tag['style'] = 'REPLACE' > for ii in i.find_next_siblings(): > if ii.name=='font' or str(ii).lstrip('')[0:1]=='/': > break > else: > if ii.name=='b': > tag.string=ii.string > print(ii.replace_with(tag)) > print(soup)
It looks like you cannot reuse a tag. Try s = '■<b>A</b> <b>B</b> <b>C</b> <b>D</b> / <font></font>' soup = BeautifulSoup(s) for i in soup.find_all(text='■'): for ii in i.find_next_siblings(): if ii.name=='font' or str(ii).lstrip('')[0:1]=='/': break else: if ii.name=='b': tag = soup.new_tag('span') tag['style'] = 'REPLACE' tag.string=ii.string print(ii.replace_with(tag)) print(soup) -- https://mail.python.org/mailman/listinfo/python-list