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


    常用的方法 findall / search / match / compile / finditer sub subn split

    import re
    
    findall, search, match
    re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
    
    s = 'a123asd456'
    
    #re.findall()  返回一个列表,里面含有没一个匹配的元素
    res1 = re.findall('d',s)
    print(res1)
    
    re.search() 返回一个对象,需要group()配合,返回第一个匹配的元素
    res2 = re.search('d',s)
    print('search:' + res2.group())
    
    re.match()  跟 search 一样,但是如果第一个要匹配的元素的话,会报错,只能在字符串开头处进行匹配
    res3 = re.match('d',s)
    print('match:'+res3.group())
    
    
    sub 检索和替换匹配项, subn 替换匹配项(几次), split 分割字符串(几次)
    
    s = r'水电费123fffffasad,.,.,;[]\/dad'
    
    res4 = re.sub('d','x',s)  # 把所有匹配项都替换为'x' 并返回一个字符串
    print(res4)
    
    res5 = re.subn('d','x',s) # 把所有匹配项都替换为'x' 并返回一个含有 已替换的字符串和替换次数
    print(res5)
    
    res6 = re.split('d',s,)  # 把匹配项作为分割符,分割字符串,并可以在最后添加次数参数,可以分割按需分割几次,如果有分组,分组优先,保留分组
    print(res6)
    
    进阶方法: conpile finditer
    compile 爬虫,自动化方向: 预编译,提高时间效率
    compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用
    
    s = r'水电费123fff-222ffasa-29d,.,.,;[]\/dad'
    com = re.compile('-0.d+|-[1-9]d+(.d+)?')
    res = com.search(s).group()
    print(res)
    
    finditer 空间效率
    
    print(re.findall('d','sjkhkdy982ufejwsh02yu93jfpwcmc'))
        # ['9', '8', '2', '0', '2', '9', '3']
    ret = re.finditer('d','sjkhkdy982ufejwsh02yu93jfpwcmc')
    for r in ret:
        print(r.group())
        # 9
        # 8
        # 2
        # 0
        # 2
        # 9
        # 3
    
    分组()  分组优先
    
    分组遇见search
    ret = re.search('d+(.d+)(.d+)(.d+)?','1.2.3.4-2*(60+(-40.35/5)-(-4*3))')
    print(ret.group())
    print(ret.group(1))
    print(ret.group(2))
    print(ret.group(3))
    
    
    ret = re.findall('>(w+)<',r'<a>wahaha<a>')
    print(ret)
    
    ret = re.search(r'<(w+)>(w+)</(w+)>',r'<a>wahaha</b>')
    print(ret.group())
    print(ret.group(1))
    print(ret.group(2))
    
    
    分组命名  

    # (?P<分组名>正则表达式)
    # m 通过转义数字m 来获取m对应位置上的 那个分组中的内容
    ret = re.search("<(?P<name>w+)>w+</(?P=name)>","<h1>hello</h1>")
    print(ret.group('name'))  #结果 :h1
    # print(ret.group())  #结果 :<h1>hello</h1>
    
    ret = re.search(r"<(w+)>w+</1>","<h1>hello</h1>")
    print(ret.group(1))
    # print(ret.group())  #结果 :<h1>hello</h1>
    
    ret = re.search(r'<(?P<tag>w+)>(?P<c>w+)</(w+)>',r'<a>wahaha</b>')
    print(ret.group())
    print(ret.group('tag'))
    print(ret.group('c'))
    
  • 相关阅读:
    About me
    判断IE和360浏览器
    windows系统下在Hbuilder和WebStorm使用autoprefixer插件
    从零到一详聊如何创建Vue工程及遇到的常见问题
    谈谈axios配置请求头content-type
    vue-router导航守卫(router.beforeEach())的使用
    vue-cli项目使用mock数据的方法(借助express)
    vue.js移动端配置flexible.js
    图解CSS3-flex布局
    vue工程利用pubsub-js实现兄弟组件之间的通信
  • 原文地址:https://www.cnblogs.com/niuli1987/p/9439430.html
Copyright © 2011-2022 走看看