[英]Python Regular Expression OR not matching
由於某些原因,
m = re.search('(<[^pib(strong)(br)].*?>|</[^pib(strong)]>)', '</b>')
匹配字符串,但是
m = re.search('(</[^pib(strong)]>)', '</b>')
才不是。 我試圖匹配所有不是的標簽
<p>, <b>, </p>, </b>
等等。 我誤解了一些關於'|'的事情嗎? 作品?
你這樣做是錯的。 首先, []
之間的字符匹配不同: [ab]
將匹配a
或b
,所以在你的情況下[^pib(strong)]
將匹配所有不是p
, i
,a b
,a (
等等(注意^
的否定)。你的第一個正則表達式匹配僅僅是巧合。
此外,您不應該使用正則表達式解析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>
,所以你應該把它帶到考慮)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.