1、正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
re 模块使 Python 语言拥有全部的正则表达式功能。
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
import re print(re.match(\'www\', \'www.runoob.com\').span()) # 在起始位置匹配 print(re.match(\'com\', \'www.runoob.com\')) # 不在起始位置匹配
结果:
(0, 3)
None
import re line = "Cats are smarter than dogs" matchObj = re.match( r\'(.*) are (.*?) .*\', line) if matchObj: print ("matchObj.group() : ", matchObj.group()) print ("matchObj.group(1) : ", matchObj.group(1)) print ("matchObj.group(2) : ", matchObj.group(2)) else: print ("No match!!")
结果:
matchObj.group() : Cats are smarter than dogs matchObj.group(1) : Cats matchObj.group(2) : smarter
r\'(.*) are (.*?) .*\',r的意思为raw string,纯粹的字符串,group(0),是匹配正则表达式整体结果,group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分。
re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
import re line = "Cats are smarter than dogs"; matchObj = re.match( r\'dogs\', line, re.M|re.I) if matchObj: print ("match --> matchObj.group() : ", matchObj.group()) else: print ("No match!!") matchObj = re.search( r\'dogs\', line, re.M|re.I) if matchObj: print ("search --> matchObj.group() : ", matchObj.group()) else: print ("No match!!")
结果:
No match!!
search --> matchObj.group() : dogs
re.findall方法
findall能够找到所匹配的结果,并且以列表的形式返回。
import requests import re link = "http://www.sohu.com/" headers = {\'User-Agent\' : \'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6\'} r = requests.get(link, headers= headers) html = r.text title_list = re.findall(\'href=".*?".<strong>(.*?)</strong>\',html) print (title_list)
[\'新闻\', \'财经\', \'体育\', \'房产\', \'娱乐\', \'汽车\', \'时尚\', \'科技\', \'美食\', \'星座\', \'邮箱\', \'地图\', \'千帆\', \'畅游\']
抓取搜狐的主标题。