Python正则表达式:仅当不包含在特定字符之间时替换文本

Python正则表达式:仅当不包含在特定字符之间时替换文本,python,regex,Python,Regex,想出一个与模式相反的正则表达式是很棘手的。在这种情况下,用正数表示您要匹配的内容和不想匹配的内容是很有帮助的,然后根据匹配的内容更改替换的值 例如: blah blah <a href="/Prevage+MD">Prevage MD</a> xxx yyy zzz <a href="/Prevage">Prevage</a> asdf 重新导入 text=''示例文本:blah blah xxx yyy zzz Prevage asdf'' d

想出一个与模式相反的正则表达式是很棘手的。在这种情况下,用正数表示您要匹配的内容和不想匹配的内容是很有帮助的,然后根据匹配的内容更改替换的值

例如:

blah blah <a href="/Prevage+MD">Prevage MD</a> xxx yyy zzz <a href="/Prevage">Prevage</a> asdf
重新导入
text=''示例文本:blah blah xxx yyy zzz Prevage asdf''
def更换(m):
标记,=m.groups()
如果标签:
返回标签
其他:
返回“XXX”
打印re.sub('()| Prevage',替换,文本)
其中打印:

import re

text = '''Example text: blah blah <a href="/Prevage+MD">Prevage MD</a> xxx yyy zzz Prevage asdf'''

def replace(m):
    tag, = m.groups()
    if tag:
        return tag
    else:
        return 'XXX'

print re.sub('(<.*?>)|Prevage', replace, text)
示例文本:废话xxx yyy zzz xxx asdf

但是,请注意,当遇到嵌套的HTML标记时,这将不会像预期的那样工作。对于一个完整的解决方案,你应该考虑使用一个HTML解析库。

是否有一个原因,你没有使用一个合适的HTML解析器,比如“漂亮的汤”?@巴德,它也将匹配<代码> >代码>在代码< A/<代码>标签。不希望替换
中的一个。那
((*?)| Prevage
?好的。更好的是
((?:*?)
。啊,是的,我想这是一个使用非捕获组的合理地方。
import re

text = '''Example text: blah blah <a href="/Prevage+MD">Prevage MD</a> xxx yyy zzz Prevage asdf'''

def replace(m):
    tag, = m.groups()
    if tag:
        return tag
    else:
        return 'XXX'

print re.sub('(<.*?>)|Prevage', replace, text)
Example text: blah blah <a href="/Prevage+MD">XXX MD</a> xxx yyy zzz XXX asdf