爬虫常常获取到html文件,从中提取有效信息的一种方式就是用正则表达式,方法基础但是强大。
正则表达式就是在字符串中寻找满足某种条件的子串。将筛选条件表示出来的符号就是正则表达式。
Python内置了re模块,可用其完成正则表达式的匹配。
在re模块中,常用的有5个函数,match、search、findall、sub、compile。
re.match
re.match(pattern, string, flags=0)
pattern为正则表达式,
string是原始字符串,
flags是匹配模式。
match方法从(且只从)第一个字符开始匹配。
返回一个match对象
可以调用group、groups、span等函数。
re.search
与match相类似,只是search不是必须要匹配第一个字符。
re.findall
相当于search的升级版。search只能匹配到第一个子串,而findall可以匹配所有子串。
re.sub
re.sub(pattern, repl, string, count=0, flags=0)
参数多了一个repl
sub是将原字符串中匹到的子串替换为repl
re.compile
re.compile(pattern, flags=0)
对于常用的正则表达式,可以先用compile,得到对象可以调用match、serach等函数。
常见问题
1.贪婪匹配
.* 可以匹配任意字符,会尽可能的多匹配字符,所以会导致某些问题。
比如用.(\d)匹配手机号,我们得到的手机号只有一位数字,因为其它数字被.匹配了。所以通常用 .*? 来进行非贪婪匹配,把字符留给后面的表达式。
2.匹配换行符
. 默认可以匹配除换行外的所有字符,如果把匹配模式设置为re.S,则 . 可以匹配换行符。
3.转义字符
比如 ? 表示匹配0个或1个,但如果要匹配字符串中的 ? , 则要进行转义:?。