python re模块(正则表达式)

示例:

>>> import re
>>> re.search(r'TG','I Love TG')
<_sre.SRE_Match object; span=(7, 9), match='TG'>
>>> re.search(r'.','I Love Python')
<_sre.SRE_Match object; span=(0, 1), match='I'>
>>> re.search(r'\.','I Love Python')#.匹配任何字符  \转义字符
>>> re.search(r'\.','I Love Python.com')#.匹配任何字符  \转义字符
<_sre.SRE_Match object; span=(13, 14), match='.'>
>>> re.search(r'\d','I Love 125463')#\d匹配数字
<_sre.SRE_Match object; span=(7, 8), match='1'>
>>> re.search(r'[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}','192.168.1.1')#匹配ip地址
<_sre.SRE_Match object; span=(0, 11), match='192.168.1.1'>
>>> re.findall(r'[a-z]','FDSEasdgHJKAzz') #匹配所有符合条件的字符
['a', 's', 'd', 'g', 'z', 'z']
>>> re.findall(r'\w','的返SAAzxc1442d')
['的', '返', 'S', 'A', 'A', 'z', 'x', 'c', '1', '4', '4', '2', 'd']
>>> 
---------爬取某贴吧图片

import urllib.request
import re

def url_open(url):
     headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}
     req= urllib.request.Request(url=url,headers=headers)
     response= urllib.request.urlopen(req)
     html = response.read().decode('utf-8')
     return html

def get_img(html):
    p=r'<img src="([^"]+\.jpg)"'
    #p=r'<img class="BDE_Image" src="([^"]+\.jpg)"'
                                        
    imglist =re.findall(p,html)

    for each in imglist:
        filename=each.split("/")[-1]
        filename=re.findall(r'[0-9a-z]{0,10}\.jpg',filename)
        for fn in filename:
             print(fn)
             urllib.request.urlretrieve(each,fn,None)
        
        
        
if __name__=='__main__':
    #url='https://tieba.baidu.com/p/3563409202'
    url='https://tieba.baidu.com/f?kw=%E5%A5%B3%E7%A5%9E&ie=utf-8&tp=0'
    get_img(url_open(url))
   
            


   
re模块常用函数
常用的函数有:compile、search、match、split、findall(finditer)、sub(subn)

1.compile:

python代码最终会被编译为字节码,之后才被解释器执行。

在模式匹配之前,正在表达式模式必须先被编译成regex对象,预先编译可以提高性能

,re.compile()就是用于提供此功能。使用compile完成一次转换之后,在每次使用模式的时候就不用重复转换

>>> import re
>>> s='1,2,3,6,5,4,7,8,9'
>>> ob=re.compile('[,]+')
>>> ob.split(s)
['1', '2', '3', '6', '5', '4', '7', '8', '9']
>>> 


2.match : 从字符串的起点做匹配

>>> import re
>>> re.match('TG','asdjadTGdahoda')
>>> re.match('TG','TGfhaodqo0')
<_sre.SRE_Match object; span=(0, 2), match='TG'>
>>> 
3.search : 在字符串中查找匹配正则表达式模式的位置,返回 MatchObject 的实例,如果没有找到匹配的位置,则返回 None。

>>> re.search('TG','daohduiq0TGdhIODH')
<_sre.SRE_Match object; span=(9, 11), match='TG'>
>>> re.search('TG','TGshpkfjsdkf')
<_sre.SRE_Match object; span=(0, 2), match='TG'>
>>> 
--------------------------match与search区别------------------------

match()函数只从开始位置匹配,
search()会扫描整个字符串查找匹配
也就是说match()只有在0位置匹配成功的话才有返回

4.split:根据指定字符切割整个字符串

>>> re.split(r',','1,5,6,5,4,8,9')
['1', '5', '6', '5', '4', '8', '9']
>>> 


5.findall :搜索string,以列表形式返回全部能匹配的子串

>>> re.findall(r'[0-9]+','sfs48sf8f6s4f46sf4s4fs4f')
['48', '8', '6', '4', '46', '4', '4', '4']

6.finditer:返回string中所有与pattern相匹配的全部字串,返回形式为迭代器

>>> re_finditer= re.finditer(r'[0-9]+','sfs48sf8f6s4f46sf4s4fs4f')
>>> for i in re_finditer:
	print(i)

	
<_sre.SRE_Match object; span=(3, 5), match='48'>
<_sre.SRE_Match object; span=(7, 8), match='8'>
<_sre.SRE_Match object; span=(9, 10), match='6'>
<_sre.SRE_Match object; span=(11, 12), match='4'>
<_sre.SRE_Match object; span=(13, 15), match='46'>
<_sre.SRE_Match object; span=(17, 18), match='4'>
<_sre.SRE_Match object; span=(19, 20), match='4'>
<_sre.SRE_Match object; span=(22, 23), match='4'>
>>> 
7.sub:用于替换字符串中的匹配项
>>> re.sub(r',','_','fsf,fsf,fh,eyt')
'fsf_fsf_fh_eyt'
>>> 
8.subn:替换字符串中的匹配项并返回替换次数

>>> re.subn(r',','_','fsf,fsf,fh,eyt')
('fsf_fsf_fh_eyt', 3)
>>> 

-----------------sub与subn的区别

两者的不同之处在于subn返回替换的次数



  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tiegenZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值