最近在写采集站的python程序的时候,遇到几个小问题,虽然问题小,但还是挺磨人的,这里记录一下,以便查阅,再次吐槽下百度搜索环境,真的是各种抄,正经答案搜不出来。
正则贪婪模式:默认情况下python的re模块正则默认使用贪婪匹配,如果你发现匹配结果不正确,可以尝试在正则后面加上?来取消贪婪模式。
例如下面是一个匹配<pre>标签内容的正则
复制
<pre.*>(.*)</pre>
如果你的内容中有多个pre标签,很有可能只得到一个结果,正确的正则应取消贪婪匹配,如下
复制
<pre.*?>(.*?)</pre>
正则替换时,路径带有\导致正则报错。
例如:使用如下代码替换时,会报错,原因是路径中的\被识别为转义
复制
data="""<pre>$$$###</pre>""" regex = '<pre.*?>(.*?)</pre>' r=re.sub(regex,"<mypre>Me\Task\DeferredServiceLis</mypre>",data,1,re.DOTALL)
正确做法,应将替换内容用repr函数转换下
复制
data="""<pre>$$$###</pre>""" regex = '<pre.*?>(.*?)</pre>' r=re.sub(regex,repr("<mypre>Me\Task\DeferredServiceLis</mypre>"),data,1,re.DOTALL)
上面的办法还不够保险,可以使用lambda m: z
,实测非常完美,示例如下
复制
data="""<pre>$$$###</pre>""" regex = '<pre.*?>(.*?)</pre>' z="<mypre>Me\Task\DeferredServiceLis</mypre>" r=re.sub(regex,lambda m: z,data,1,re.DOTALL)
评论 (0)