我想用'*'替换正则表达式,但前提是正则表达式在<>之外。重点是不要干扰html标签。
我用它来取代:
re.sub(r'SOMEREGEX(?=[^>]*(<|$))', '*', line)
然而我遇到了他的问题:如果我的正则表达式是:
f.*k
然后这个:
fzzzzzzzzz<HTMLTAG>zzzzzzzk
会变成'*',这是我不想要的。我该如何克服这个问题?
约束:
- 所有括号都匹配
- 没有嵌套括号
-SOMEREGEX由用户提供。我不想改变它。
答案 0 :(得分:2)
您可以尝试将.
字符替换为“任何字符” - 使用字符类[^<>]
,其匹配任何字符除了尖括号,{{ 1}}。这将给出正则表达式<>
。这将匹配f[^<>]*k
但不匹配facebook
。
但是,仍有一些事情可能会出错。您是否考虑过使用正确的HTML解析器而不是正则表达式? BeautifulSoup简单,美味,有趣。
答案 1 :(得分:0)
在结束和开始尖括号之间搜索:
re.sub(r'(^|>)f[^<]*k(<|$)', r'\1*\2', line)
需要\1
和\2
来替换模式可能已从line
移除的尖括号。