簡體   English   中英

Python正則表達式或不匹配

[英]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]將匹配ab ,所以在你的情況下[^pib(strong)]將匹配所有不是pi ,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM