今天用python爬取一个汽车站,内容里竟然包含了大量CSS(不得不说这个官网做的真是烂)去掉这些CSS这么写:
conmment = re.sub(r'<style.*?</style>', ' ', conmment)
可是测试后发现CSS还在。找了很久,说要改成:
conmment = re.sub(r'<style[^>]*>.*?</style>', '', conmment)
可是还是不行,自己看了网页很久,突然灵光一现,应该改成:
conmment = re.sub(r'<style.*?</style>', ' ', conmment, flags=re.DOTALL)
果然,这次成功了。你知道原因吗?不知道的继续往下看,知道的可以关闭了。
在 Python 的 re 模块中,使用 re.DOTALL 标志会改变点号(.)的行为。通常,点号会匹配除换行符外的所有字符。但是,当你使用 re.DOTALL 标志时,点号会匹配包括换行符在内的所有字符。这样一来,你就可以使用一个点号来匹配一个多行的字符串。
在你的情况下,当你使用 re.sub 进行替换时,如果你希望匹配的内容包括换行符,那么就可以使用 re.DOTALL 标志来确保点号可以匹配跨行的内容。
未经允许不得转载:445IT之家 » python 正则明明是正确的但是却无法匹配的原因