我正在使用Python中的以下正则表达式从HTML文件中的链接中删除协议:
re.sub(r"((http:|https:)?(\/\/website.com))", r"\3", result)
这可以按预期工作,但我不想在属性为content
时替换协议。所以我开始研究使用Regex Negative Lookbehind。
(?<!content=")(http:|https:)?(\/\/website.com)
这个正则表达式基本上应该意味着如果字符串以<content="
开头,那么它应该与其余字符串不匹配。但问题是它只拒绝可选的正则表达式(http:|https:)?
,可能因为它是可选的。如果它不是可选的,它会拒绝整行。
这是一个清晰显示问题的屏幕截图。第一行应该完全拒绝,但它只拒绝协议。
有什么建议吗? :)
谢谢!
答案 0 :(得分:1)
正则表达式找到//website.com
之前没有content="
的{{1}}。所以返回一个匹配。
怎么样
(?<!content="|content="http:|content="https:)(http:|https:)?(\/\/website.com)
答案 1 :(得分:1)
原始正则表达式的问题在于它与之前没有//website.com
的{{1}}匹配,因为content="
/ http:
是可选的。要解决此问题,您可以将协议包含在负面的lookbehind中。
由于Python不支持可变长度的lookbehinds,您可以执行以下操作:
https: