Python正则表达式,避免跳过括号

时间:2012-06-15 23:04:37

标签: python regex brackets

我想用'*'替换正则表达式,但前提是正则表达式在<>之外。重点是不要干扰html标签。

我用它来取代:

re.sub(r'SOMEREGEX(?=[^>]*(<|$))', '*', line)

然而我遇到了他的问题:如果我的正则表达式是:

f.*k

然后这个:

fzzzzzzzzz<HTMLTAG>zzzzzzzk

会变成'*',这是我不想要的。我该如何克服这个问题?

约束:

- 所有括号都匹配

- 没有嵌套括号

-SOMEREGEX由用户提供。我不想改变它。

2 个答案:

答案 0 :(得分:2)

您可以尝试将.字符替换为“任何字符” - 使用字符类[^<>],其匹配任何字符除了尖括号,{{ 1}}。这将给出正则表达式<>。这将匹配f[^<>]*k但不匹配facebook

但是,仍有一些事情可能会出错。您是否考虑过使用正确的HTML解析器而不是正则表达式? BeautifulSoup简单,美味,有趣。

答案 1 :(得分:0)

在结束和开始尖括号之间搜索:

re.sub(r'(^|>)f[^<]*k(<|$)', r'\1*\2', line)

需要\1\2来替换模式可能已从line移除的尖括号。