正则表达式
正则基础
import re
print re.search("b","abcd") #前面是条件,后面是内容
print re.search("a(b|de)c","abcd") #(|)表示或abc或adec
print re.search("a[bde]c","adcb") #表示,abc\adc\aec 注意和上面的对比
print re.search("a.c","adcb") #"."代表任意一个字符,且必须有一个
print re.search("a..c","adecb") #".."代表任意二个字符,且必须有二个
print re.search("a\dc","a1cb") #"\d"代表数字
print re.search("a\wc","a1cb") #"\w"代表数字或字母
print re.search("a\w{1,3}c","a12acb") #"\w{1,3}"匹配1-3个数字或字母
print re.search("a\w*c","a12acb") #"\w*"匹配任意个长度数字或字母,\w决定类型,*号决定任意长度
print re.search("a*c","abcb") #实际匹配到"c",“a*c”表示c前面可以有任意个a,这*相当于“0”了
print re.search("a+c","abcb") #实际匹配不到,“a+c”,"+"表示一次或多次
print re.search("a?c","aacb") #匹配到“ac”,“a?c”,"?"表示a出现0次或1次
search VS match
####search match 正则的规则没区别,只是match是从匹配,如:re.match("abc","fabcd")久匹配不到,search可以。
print re.search("^abc","abcb") #相当于re.match("abc","abcd"),注意"^",可以取代match
print re.search("abc$","aabc") #$表示必须在尾部出现才可以
#search 与 findall区别 search只显示查找到的第一个,find则显示匹配到所有的
print re.findall("abc","abcdabcd")
###将findall做拆分
pat = re.compile("ab.") #定义一个规则
pat.findall("abcd,abed")
s = '<a href="http://www.sina.com.cn">'
re.findall('href=".*"',s) #输出:['href="http://www.sina.com.cn"']
re.findall('href="(.*)"',s) #输出:['http://www.sina.com.cn']
# 此处"()"是python独有,表示只输出配到的()内容,相当于截取
###注意转义字符"\",比如就需要匹配"."或“*”或"?"的情况
实际应用中,以findall使用范围较广,findall与search用法基本一致。
———小练习————-
import requests,re
url ='http://tieba.baidu.com/f?ie=utf-8&kw=%s&fr=search' % "java"
tieba = requests.get(url)
print tieba.status_code #返回的状态码
print re.findall('title="回复">(\d{1,})</div>',tieba.content)
###注意两种写法##
url ='http://tieba.baidu.com/f?ie=utf-8&kw=%s&fr=search'
tieba = requests.get(url % "python")
print tieba.status_code#返回的状态码
print re.findall('title="回复">(\d{1,})</div>',tieba.content)
——–贪婪匹配——–
s1 = "<div>a</div><div>b</div>"
re.findall("<div>(.*)</div>",s1) #贪婪匹配 返回:['a</div><div>b']
re.findall("<div>(.*?)</div>",s1)#非贪婪匹配 返回:['a', 'b']
——–练习——–
import requests,re
url = 'http://www.sohu.com'
news = requests.get(url)
link = re.findall('<li sdevindex="6">(.*?)</li>',news.content)
for a in link:
b = re.findall('_blank">(.*?)</a>',a)
print b[0].decode("gbk")