python re.sub 如何替换 匹配中的多段内容

str="<p><span style="font-size: 24px;">音频展示区</span></p>
     <p>音频是非常好的音频</p>
     <img src="../static/media/20200716172好音频.mp4" alt="">"

需要使用re.sub(pattern, repl, str) 把上面的所有字为"音频"的替换为
"<b style='color:red'>音频</b>"
但又不能替换在<img>标签内的"音频"

请问如何写这个正则
我自己的思路是:

pattern = ">[^<]*?音频.* ?<"
repl = r"><b class='key' style='color:red'>音频</b><"
re.sub(pattern, repl, str) 

虽然成功避开img内的替换字符
但是匹配之后 "音频展示区","音频是非常好的音频" 这两个字符都全部变成替换的字符了 

我主要是想给"音频"这两个字加个标签变个色 只需替换这两个字其他的的字都不替换
求大神相助!!!

经过大神的提点 改进方法:

search="音频"
def deal(s):
    newStr=s.group().replace(search,"<b class='key' style='color:red'>{0}</b>".format(search))
    return newStr

pattern=">[^<]*?{0}.*?<".format(search)
con=re.sub(pattern, deal, str)
import re


c = re.compile(r'\d')

s = 'you1are2welcome'

# 用指定的内容,替换正则匹配的内容,也可以指定替换次数
ret = c.sub(' ', s, 1)

print(ret)


# 处理函数接收一个参数(每次的匹配结果)
def deal(s):
  return str(int(s.group()) * 2)

# 可以认为干预替换过程,传递一个函数即可
ret = re.sub(r'\d', deal, 'you1are2welcome')
print(ret)
str='<p><span style="font-size: 24px;">音频展示区</span></p>     <p>音频是非常好的音频</p>     <img src="../static/media/20200716172好音频.mp4" alt="">'

str.replace('音频',"<b class='key' style='color:red'>音频</b>",2)

如果确定只是前两个音频需要替换 那就用 replace方法替换前两个就好了

import re

str1 = """
<p><span style="font-size: 24px;">音频展示区</span></p>
     <p>音频是非常好的音频</p>
     <img src="../static/media/20200716172好音频.mp4" alt="">
     <p><span style="font-size: 24px;">音频展示区</span></p>
     <p>音频是非常好的音频</p>
     <img src="../static/media/20200716172好音频.mp4" alt="">
     """
repl = r"<b class='key' style='color:red'>音频</b>"
pattern1 = ">[^<]+<"
# 先匹配出所有标签文字中的 音频 关键字
list1 = re.findall(pattern1, str1)
# 打印出所有的匹配结果
print(list1)
for item in list1:
    # 如果发现了 音频 关键字
    if '音频' in item:
        item2 = item.replace('音频', repl) # 替换音频 为 带有特殊标签的HTML代码
        str1 = str1.replace(item, item2) # 把原来字符串中的带有音频的内容 替换为 带有HTML标签的内容
print(str1)


代码加了注释,应该很容易看懂,如果有不懂的地方,再来问我。