今天用python爬取一個(gè)汽車站,內(nèi)容里竟然包含了大量CSS(不得不說(shuō)這個(gè)官網(wǎng)做的真是爛)去掉這些CSS這么寫(xiě):
conmment = re.sub(r'<style.*?</style>', ' ', conmment)
可是測(cè)試后發(fā)現(xiàn)CSS還在。找了很久,說(shuō)要改成:
conmment = re.sub(r'<style[^>]*>.*?</style>', '', conmment)
可是還是不行,自己看了網(wǎng)頁(yè)很久,突然靈光一現(xiàn),應(yīng)該改成:
conmment = re.sub(r'<style.*?</style>', ' ', conmment, flags=re.DOTALL)
果然,這次成功了。你知道原因嗎?不知道的繼續(xù)往下看,知道的可以關(guān)閉了。
在 Python 的 re 模塊中,使用 re.DOTALL 標(biāo)志會(huì)改變點(diǎn)號(hào)(.)的行為。通常,點(diǎn)號(hào)會(huì)匹配除換行符外的所有字符。但是,當(dāng)你使用 re.DOTALL 標(biāo)志時(shí),點(diǎn)號(hào)會(huì)匹配包括換行符在內(nèi)的所有字符。這樣一來(lái),你就可以使用一個(gè)點(diǎn)號(hào)來(lái)匹配一個(gè)多行的字符串。
在你的情況下,當(dāng)你使用 re.sub 進(jìn)行替換時(shí),如果你希望匹配的內(nèi)容包括換行符,那么就可以使用 re.DOTALL 標(biāo)志來(lái)確保點(diǎn)號(hào)可以匹配跨行的內(nèi)容。
未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » python 正則明明是正確的但是卻無(wú)法匹配的原因