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)
代码加了注释,应该很容易看懂,如果有不懂的地方,再来问我。