首页 > 一段python 的正则

一段python 的正则

re_qb = re.compile(r'detail.*?<a.*?>(.*?)<.*?title="(.*?)">\s*(.*?)\s*?<',re.DOTALL)

http://www.oschina.net/code/snippet_143473_24609 命令行看糗百里的.请详细解释一下每一部分的含义.


其实这个和python没多大关系,主要是正则表达式。

re.compile()是将字符串书写的正则表达式转换成模式对象,以便后面进行匹配。其中,r''里面的内容是字符串

'.'表示通配符,可以匹配除了换行符以外的任意一个字符,但是加上re.DOTALL之后'.'就可以匹配到换行符了。

然后逐个来解释,其中,detail, <, a, >, title="等等不是特殊字符的,直接匹配

.表示通配,允许重复0次或多次,所以.可以匹配任意多个字符,也可以匹配0个字符。?表示非贪婪模式,如果不加问号直接写成detail.*<a这样会从detail开始匹配,一直匹配到最后一个<a处,而我们想要的是从detail开始匹配到第一次出现<a为止,所以就要用非贪婪模式。这就是问号的作用。

<a.*?>同理,从<a开始匹配,到第一个>为止的任意字符。

括号()表示子模式,此处理解为括号内就是要找出来的内容即可。

最后就是\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。


命令行看糗百写的不是很好,分割不清楚,带有图片的应该过虑掉不显示。

最开始分析的时候可以它匹配的糗百的页面找到源码,然后用正则表达式在线测试,高亮显示匹配结果,一点一点的测试,比较容易明白。

【热门文章】
【热门文章】