Просто поиграемся с интерактивной подсказкой ... Я уверен, что есть лучшее решение, но ...
from bs4 import BeautifulSoup
data = '''<div>text1 <span>text2</span></div>'''
soup = BeautifulSoup(data, features="lxml")
div = soup.find('div')
a, *b = div.contents
c = a.replace('text1', 'text3')
a.replace_with(c)
print(div)