zoukankan      html  css  js  c++  java
  • re模块

    # 根据正则规则从一段内容中查找结果
    ret= re.findall('d+','alex123yuan234')
    print(ret)    #['123', '234']
    
    ret= re.findall('d','alex123yuan234')
    print(ret)    #['1', '2', '3', '2', '3', '4']
    
    
    ret = re.search('d+','alex123yuan234')
    print(ret)           # 结果对象<_sre.SRE_Match object; span=(4, 7), match='123'>
    print(ret.group())   #123
    
    ret = re.search('d','alex123yuan234')
    print(ret.group())   # 1
    
    ret = re.search('d+','alexyuan')
    print(ret)              #None
    print(ret.group())  #没有数字  报错
    
    ret = re.search('d+','alexyuan')
    if ret:
        print(ret.group())
    
    
    ret = re.match('d+','alex123')
    print(ret)           #None   
    print(ret.group())   # 开头没有数字报错
    
    ret = re.match('d+','123alex')
    print(ret.group())    #123

    findall 找所有 返回列表

    search  找第一个 返回一个结果集,通过.group取值,如果没有匹配到,返回None,.group报错

    match   从头开始找第一个,返回一个结果集,通过.group取值,如果没有匹配到,返回None,.group报错

    # match可以被替代么? 可以
    ret = re.search('^d+','123alex')    #== re.match('d+','123alex')
    print(ret.group())
    # re.sub
    ret = re.sub('d+','sb','alex84wusir73')   # 默认替换所有
    print(ret)    #alexsbwusirsb
    ret = re.sub('d','sb','alex84wusir73')
    print(ret)    #alexsbsbwusirsbsb
    ret = re.sub('d+','sb','alex84wusir73',1) # 写了1表示替换一次
    print(ret)    #alexsbwusir73
    
    
    # re.subn()
    ret = re.subn('d+','sb','alex84wusir73')
    print(ret)  # ('alexsbwusirsb', 2)
    
    
    # re.split()
    ret = re.split('d+','alex84wusir73yuan')
    print(ret)    #['alex', 'wusir', 'yuan']
    #re.compile
    
    par = re.compile('d+')
    print(par)          #re.compile('\d+')
    ret = par.findall('alex84')
    print(ret)          #['84']
    ret = par.search('alex38')
    print(ret.group())  #38
    
    
    # finditer
    ret = re.findall('d','alex84alex84alex84alex84alex84alex84alex84alex84'*200)
    print(ret)
    
    ret = re.finditer('d','alex84alex84alex84alex84alex84alex84alex84alex84'*200)
    for i in ret:
        print(i.group())
    
    
    
    par = re.compile('d+')
    ret = par.finditer('alex84alex84alex84alex84alex84alex84alex84alex84'*200)
    for i in ret:
        print(i.group())

    空间 finditer 返回一个迭代器,迭代器里装的都是结果集,需要通过group取值

    时间 compile 能够提前编译一个正则表达式,当同一个正则需要被多次使用的时候,可以节省时间

    例题: 取出 hahaha  wahaha  qqxing

    <h1>hahaha<h1>

    <h2>wahaha<h2>

    <title>qqxing< itle>

    import re
    ret = re.findall('>w+<',r'<title>qqxing<	itle>')
    print(ret[0].strip('<>'))

    分组在正则表达式中发挥的作用

       分组在findall当中默认会优先被显示出来

       如果不想优先,那么在分组中添加(?:正则规则)表示取消这个规则的优先显示+

    import re
    ret = re.findall('>(w+)<',r'<title>qqxing<	itle>')
    print(ret)  # findall永远优先显示分组中的内容
    import re
    ret = re.findall('www.(?:baidu|oldboy).com',r'www.baidu.com')
    print(ret)   #['www.baidu.com']
    ret = re.findall('d+(?:.d+)?',r'1.23+2.34')
    print(ret)   #['1.23', '2.34']
    
    
    # split和分组,会保留被切掉的在分组中内容
    import re
    ret = re.split('(d+)','alex84wusir73')
    print(ret)    #['alex', '84', 'wusir', '73', '']
    import re
    ret = re.split('d(d)','alex84wusir73')
    print(ret)   #['alex', '4', 'wusir', '3', '']  只保留分组里面
    # search和分组
    import re
    ret = re.search(r'<(w+)>(w+)<\(w+)>',r'<title>qqxing<	itle>')
    print(ret.group(0))  # 不受到分组的影响  <title>qqxing<	itle>
    print(ret.group(1))  #title
    print(ret.group(2))  #qqxing

    在爬虫数据清洗的过程中最常用的正则表达式的操作

    并不是把我要的内容的正则写出来

    而是把整个页面都用正则描述下来,然后把我需要的内容放在分组里

    这样就能够取到我想要的内容了

    遇见分组

    findall 优先显示分组中的内容

    split   保留被切掉的分组内的内容

    search  可以通过组的索引取值

    取消分组的特殊行为(?:正则)

    # 分组命名
    import re
    ret = re.search(r'<(?P<tab1>w+)>(?P<content>w+)<\(w+)>',r'<title>qqxing<	itle>')
    print(ret.group(0))  # 不受到分组的影响
    print(ret.group('tab1'))  # 不受到分组的影响
    print(ret.group('content'))  # 不受到分组的影响
    # 特殊的需求
    # 前端语言 html
    # <h1>wahaha</h2></h1>
    # par = '<w+>.*?</w+>'
    import re
    ret = re.search('<(?P<tag>w+)>.*</(?P=tag)>','<h1>wahaha</h2></h1></h3>')
    print(ret.group())
    
    par = '<w+>.*?</w+>'
    import re
    ret = re.search(r'<(w+)>.*</1>','<h1>wahaha</h2></h1></h3>')
    print(ret.group())
    
    
    # import re
    # 当我们要匹配的内容混在不想匹配的内容中
    # 只能把不想要的也匹配出来,然后去掉不想要的就是想要的
    ret = re.findall('d+.d+|(d+)','1-2*(60+(-40.35/5)-(-4*3))')
    ret.remove('')
    print(ret)
  • 相关阅读:
    python3
    hive与hbase集成
    spark读取hbase形成RDD,存入hive或者spark_sql分析
    spark机器学习笔记01
    CodeForces 55D Beautiful numbers
    NOIP 2016 D2T2 蚯蚓](思维)
    SCOI 2009 围豆豆(状压DP)
    POJ 1852 Ants(贪心)
    STA树的深度(树型DP)
    HDU 5963 朋友 (找规律,思维)
  • 原文地址:https://www.cnblogs.com/Xiao_Xu/p/10578641.html
Copyright © 2011-2022 走看看