0

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

我用它来替换:

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

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

f.*k

然后这个:

fzzzzzzzzz<HTMLTAG>zzzzzzzk

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

约束:

-所有括号都匹配

- 没有嵌套括号

-SOMEREGEX 由用户提供。我宁愿不改变这一点。

4

2 回答 2

2

您可以尝试用.字符类替换字符 - “任何字符” -[^<>]匹配尖括号之外的任何字符,<>. 这将给出正则表达式f[^<>]*k。这将匹配facebook但不匹配face<b>book

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

于 2012-06-15T23:08:36.007 回答
0

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

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

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

于 2012-06-15T23:37:25.340 回答