Python正则表达式(re)

正则表达式

正则基础

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") 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值