前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python正则表达式的应用

python正则表达式的应用

作者头像
热心的社会主义接班人
发布2018-05-16 15:53:46
7820
发布2018-05-16 15:53:46
举报
文章被收录于专栏:cscs

regular expresion由一系列特定字符及其组合成的字符串,用来对目标字符串进行过滤操作。,如手机号码,身份证号码,网址等校验。

re相关知识点

python正则表达式库为re,用import re导入,在然后用re.compile(pattern,flag)将正则表达式字符串编译成正则表达式对象。在利用re提供的内置函数对字符串进行匹配,搜索,替换,切分和分组等操作。

flag常用的取值:

re.I 忽略大小写,re.X 忽略空格

代码语言:javascript
复制
import re
def check(string):
    p=re.compile("^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$",re.I)
    if p.match(string):
        print("%s符合规则"%string)
    else:
        print("%s不符合规则"%string)

st1='dflx@163.com'
st2='123456@qq.com'
check(st1)
check(st2)
代码语言:javascript
复制
dflx@163.com符合规则
123456@qq.com符合规则

re.match()从起始位置匹配

re.search()搜索整个字符串匹配,搜索成功返回起始位置和终止位置。

re.findall()以列表形式返回全部匹配的子串

代码语言:javascript
复制
>>> print(p.match('dAA00'))
None
>>> re.match('adf','sdadfg')
>>> re.search('adf','sdadfgadf')
<_sre.SRE_Match object; span=(2, 5), match='adf'>
>>> re.findall('adf','sdadfgadf')
['adf', 'adf']

切分

在实际应用中,不同数据源用不同的分隔符,可能是空格,制表符号,逗号等等。 利用正则表达式和split()函数,可以方便的分开。

re.split(pattern,string,maxsplit)

.分隔开

代码语言:javascript
复制
>>> st='https:\\www.baidu.com'
>>> lt=re.split('\.',st)
>>> lt
['https:\\www', 'baidu', 'com']

逗号和空格分隔。

代码语言:javascript
复制
>>> st='df lx 23,77'
>>> li=re.split('[\s\,]',st)
>>> li
['df', 'lx', '23', '77']

替换,利用re库中sub()和subn()函数,可以将正则表达式所匹配的内容换成指定的字符串。

sub()返回的是替换后的字符串

subn()是以元组类型还回新字符串和替换的次数。

关键字和谐,re写的还是有点问题

代码语言:javascript
复制
>>> p=re.compile('sb' or 'fuck' or '傻逼')
>>> say='are you sb? i want to fuck you. 大傻逼'
>>> print(p.sub('***',say))
are you ***? i want to fuck you. 大傻逼
>>> print(p.subn('***',say))
('are you ***? i want to fuck you. 大傻逼', 1)
>>> p=re.compile('[sbfuck傻逼]     

下载简书交友专题的妹子图片.

我已经正则表达式,匹配了10篇文章,但是有些没有图片,有些 图片标签匹配不对,有时间在修改了. 准备遍历整过专题,下载所有图片,嘻嘻,还要判断性别,找出老乡.

代码语言:javascript
复制
import urllib.request
import urllib.parse
import re
import os

def get_road(url0):
    req=urllib.request.Request(url0)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 '
                                 '(KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36')
    response=urllib.request.urlopen(req)
    html=response.read().decode("utf-8")
    pattern=re.compile(r'<a class="title" target="_blank" href="(.*?)"')
    result=re.findall(pattern,html)
    return result

def get_jiaoyou_url(result,s0):
    s=s0
    return geturl(result,s)
    

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

def getpath(html):
    #reg=r'.*?\.png'
    reg=r'<img data-original-src="(.*?\.png)"'
    imgre=re.compile(reg)
    urls=imgre.findall(html)
    return urls

def  geturl(url,s):
    urls=[s+str(i) for i in url]
    for i in range(len(urls)):
        print(urls[i])
    print("url_length=",len(urls))
    return urls
    
    
def download(urls):
    x=10
    print("length=",len(urls))
    for url in urls:
        filename='/home/dflx/下载/jiaoyou_photo/'+str(x)+'.png'
        urllib.request.urlretrieve(url,filename)
        x+=1
    print(x)
    
def download_all(urls):
    print(len(urls))
    print('---------------')
    index=0
    while index<len(urls):
        print(urls[index])
        #download(urls[index])
        index+=1
        print("********")
    
def main():
    url0="https://www.jianshu.com/c/bd38bd199ec6"
    #ur='https://www.jianshu.com/p/407dac18983c'
    ur='https://www.jianshu.com/p/189d1b8101e6'
    html=gethtml(ur)
    path=getpath(html)
    urls=geturl(path,'https:')
    download(urls)
    
    """
    result=get_road(url0)
    allurls=get_jiaoyou_url(result,'https://www.jianshu.com')
    download_all(allurls)

   """

下载图片

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.05.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
内容识别
内容识别(Content Recognition,CR)是腾讯云数据万象推出的对图片内容进行识别、理解的服务,集成腾讯云 AI 的多种强大功能,对存储在腾讯云对象存储 COS 的数据提供图片标签、图片修复、二维码识别、语音识别、质量评估等增值服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档