出于某种原因,
m = re.search('(<[^pib(strong)(br)].*?>|</[^pib(strong)]>)', '</b>')
匹配字符串,但
m = re.search('(</[^pib(strong)]>)', '</b>')
没有。我正在尝试匹配不
的所有标签<p>, <b>, </p>, </b>
等等。我误解了一些关于'|'的事情吗?作品?
答案 0 :(得分:2)
你做错了。首先,[]
之间的字符匹配方式不同:[ab]
将匹配a
或b
,因此在您的情况下,[^pib(strong)]
将匹配所有不匹配的内容p
,i
,b
,(
等等(请注意^
的否定)。你的第一个正则表达匹配仅仅是巧合。
此外,您不应该使用正则表达式解析html / xml。相反,使用适当的xml解析库,如lxml或beautifulsoup。
以下是lxml
的简单示例:
from lxml import html
dom = html.fromstring(your_code)
illegal = set(dom.cssselect('*')) - set(dom.cssselect('p,b'))
for tag in illegal:
do_something_with(tag)
(这是一个很小的,可能是次优的示例;它只是为了向您展示使用这样一个库是多么容易。另外,请注意该库将代码包装在<p>
中,所以你应该考虑到这一点)