zoukankan      html  css  js  c++  java
  • re(模块正则表达式)

    re模块(正则)

    ​ 正则是用一些具有特殊含义的符号组合到一起(成为正则表达式)来描述字符或者字符串的方法,或者说正则就是用来描述一类事物的规则.

    import re
    
    #从字符串中全部查找内容,返回一个列表
    s = "meet_宝元_meet"
    print(re.findall("meet",s))
          #['meet', 'meet']
    
    #查找数字,字母(中文),下划线 -- w
    s = "meet_宝元__meet123"
    print(re.findall("w",s))
         #['m', 'e', 'e', 't', '_', '宝', '元', '_', '_', 'm', 'e', 'e', 't', '1', '2', '3']
        
    #查找非数字,字母(中文),下划线 -- W
    s = "meet_宝元__meet123!@#"
    print(re.findall("w",s))
         #['!', '@', '#']
    
    
    #查找任意空格,换行符,制表符   -- s
    s = "meet_ 宝元_ me  et	 
    "
    print(re.findall("s",s))
         #[' ', ' ', ' ', ' ', '	', ' ', '
    ']
        
    #查找非任意空格,换行符,制表符   --S
    s = "meet_ 宝元_ me  et	 
    "
    print(re.findall("S",s))
    	 #['m', 'e', 'e', 't', '_', '宝', '元', '_', 'm', 'e', 'e', 't']
    
    #查找数字     --d
    s = "meet_ 宝元_ me  et	 
    "
    print(re.findall("d",s))
         #['1', '2', '3']
        
    #查找非数字    --D
    s = "meet_ 宝元_ me  et	 
    "
    print(re.findall("D",s))
         #['m', 'e', 'e', 't', '_', ' ', '宝', '元', '_', ' ', 'm', 'e', ' ', ' ', 'e', 't', '	', ' ', '
    ']
        
    #查找是以什么开头的内容   -- A ^
    s = "meet宝元_123meet"
    print(re.findall("Ameet",s))  #['meet']
    print(re.findall("^meet",s))   #['meet']
    
    #查找是以什么结尾的内容   --  $
    s = "meet宝元_123meet"
    print(re.findall("t",s))      #['t']
    print(re.findall("t$",s))       #['t']
    
    #查找换行符  -- 
    
    s = "meet宝元_123meet 
     	 
    "
    print(re.findall("
    ",s))       #['
    ', '
    ']
    
    #查找制表符  --	
    s = "meet宝元_123meet 
     	 
    "
    print(re.findall("	",s))       #['	']
    
    # . 只能匹配任意一个内容(非换行符)  -- .
    s = "m
    et宝元_123maet 
     	"
    print(re.findall("m.e",s))      #['mae']
    
    # . 只能匹配任意一个内容       -- re.DOTALL
    s = "m
    et宝元_123maet 
     	"
    print(re.findall("m.e",s,re.DOTALL))  #['m
    e', 'mae']
    
    s = "meet宝元_1A-23maet"
    print(re.findall("[a-z]",s))   --小写的a到z
          #['m', 'e', 'e', 't', 'm', 'a', 'e', 't']
    print(re.findall("[A-Z]",s))   --大写的A到Z
          #['A']
    print(re.findall("[A-Za-z]",s))  --大写和小写的a到z,A到Z
          #['m', 'e', 'e', 't', 'A', 'm', 'a', 'e', 't']
    print(re.findall("[a-z0-9]",s))  --小写的a到z,数字0到9
          #['m', 'e', 'e', 't', '1', '2', '3', 'm', 'a', 'e', 't']
        
    #查找非0-9的内容
    s = "meet宝元_1A-23maet"
    print(re.findall("[^0-9]",s))
    	 #['m', 'e', 'e', 't', '宝', '元', '_', 'A', '-', 'm', 'a', 'e', 't']
        
    #匹配*前面元素0个或多个(贪婪匹配)   -- *
    s = "mmmmm"
    print(re.findall("m*",s))   #['mmmmm', '']
    
    
    #匹配+前面元素1个或多个(贪婪匹配)   -- +
    s = "meet_asdf_msss_mnns_aaam"
    print(re.findall("me+",s))    #['mee']
    
    #匹配?前面元素0个或1个      -- ?
    s = "meet_af_ms_ms_m"
    print(re.findall("m?",s))
    	 #['m', '', '', '', '', '', '', '', 'm', '', '', 'm', '', '', 'm', '']
    
    
    #{}指定次数
    s = "meet_asdf_msss_mmns_aaam"
    print(re.findall("s{3}",s))  --s{3} s重复三次 == sss
          #['sss']
    print(re.findall("s{1,3}",s))  --指定最少多少次,最多多少次
          #['s', 'sss', 's']        
        
    # 匹配左边或右边     -- |
    s = "meet_asdf_msss_mmns_aaam"
    print(re.findall("m|s",s))
          #['m', 's', 'm', 's', 's', 's', 'm', 'm', 's', 'm']
          
    #任意内容0个或多个    -- .*
    s = "m-e-me-meet-meet_123	 
    "
    print(re.findall(".*",s))
          #['m-e-me-meet-meet_123	 ', '', '']
          
    #任意内容0个或1个
    s = "m-e-me-meet-meet_123"
    print(re.findall("m.*?e",s))
          #['m-e', 'me', 'me', 'me']
          
    #任意内容1个或多个 --.+
    s = "meet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssstt"
    print(re.findall("m(.+)t",s))
         #['eet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssst']
    s = "meet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssstt"
    print(re.findall("m(?:..?)t",s))     
         #['meet']
         
         
    s = 'alex_sb ale123_sb wu12sir_sb wusir_sb ritian_sb 的 alex wusir '
    print(re.findall("w+_sb",s))
         #['alex_sb', 'ale123_sb', 'wu12sir_sb', 'wusir_sb', 'ritian_sb']    
    print(re.findall("[a-z]+_sb",s))
         #['alex_sb', 'sir_sb', 'wusir_sb', 'ritian_sb']
    
    #获取括号内的内容 -- []
    name = "m-e-me-meet-meet_123"
    print(re.findall("[1-9]",name))
          #['1', '2', '3']     --[]中的-是什么至什么不会匹配
        
        
        
        
    #findall 全部找到返回一个列表  
    print(re.findall("alex","alexdsb,alex_sb,alexnb,al_ex"))
          #['alex', 'alex', 'alex']
        
    #search 从字符串中任意位置进行匹配查找到一个就停止了,返回的是一个对象,获取匹配的内容必须用.group()进行获取
    s = '_sb alex 123_sb wu12sir_sb wusir_sb ritian_sb 的 x wusir '
    print(re.search(("ale",s).group()))
          #ale
        
    #match 从字符串开始位置进行匹配,找到一个后就停止查找,找到后返回的是一个对象,获取匹配的内容必须用.group()进行获取
    s = '_sb alex 123_sb wu12sir_sb wusir_sb ritian_sb 的 x wusir '
    print(re.match("ale",s).group())
          #报错
        
    #split 分割,可按照任意分隔符进行分割
    s = '_sb alex,123:sb;wu12sir#sb*wusir!sb ritian_sb 的 x wusir '
    print(re.split("[#,:!*]",s))
         #['_sb alex', '123', 'sb;wu12sir', 'sb', 'wusir', 'sb ritian_sb 的 x wusir ']
        
    #sub 替换
    print(re.sub('barry', 'meet', 'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。'))
         # meet是最好的讲师,meet就是一个普通老师,请不要将meet当男神对待。
        
    #compile 定义匹配规则
    obj = re.compile('d{2}')
    print(obj.findall("alex12345"))
          # ['12', '34']
        
    # finditer 返回一个迭代器
    g = re.finditer('al',"alex_alsb,al22,aladf")
    print(next(g).group())
    print([i.group() for i in g])
    # al
    #['al','al','al']
    
    #命名分组
    ret = re.search("<(?P<tag_name>w+)>w+</w+>","<h1>hello</h1>")
    print(ret.group("tag_name"))
    print(ret.group())
    #h1
    #<h1>hello</h1>
    
    练习:
    1 "1-2*(60+(-40.35/5)-(-4*3))"
    
    1.1 匹配所有的整数
    print(re.findall('d+',"1-2*(60+(-40.35/5)-(-4*3))"))
    
    1.2 匹配所有的数字(包含小数)
    print(re.findall(r'd+.?d*|d*.?d+', "1-2*(60+(-40.35/5)-(-4*3))"))
    
    1.3 匹配所有的数字(包含小数包含负号)
    print(re.findall(r'-?d+.?d*|d*.?d+', "1-2*(60+(-40.35/5)-(-4*3))"))
    
    2,匹配一段你文本中的邮箱
    s='http://blog.csdn.net/make164492212/article/details/51656638'
    print(re.findall("h.*2/",s))
    
    3,匹配一段你文本中的每行的时间字符串 这样的形式:'1995-04-27'
    
    s1 = '''
    时间就是1995-04-27,2005-04-27
    1999-04-27 老男孩教育创始人
    老男孩老师 alex 1980-04-27:1980-04-27
    2018-12-08
    '''
    print(re.findall('d{4}-d{2}-d{2}', s1))
    print(re.findall("d+-d+-d+",s1))
    
    4 匹配 一个浮点数
    print(re.findall('d+.d*','1.17'))
    
    5 匹配qq号:腾讯从10000开始:
    qq = input("请输入QQ号:")
    print(re.findall("[1-9][0-9]{4,9}",qq))
    
    s1 = '''
    <div id="cnblogs_post_body" class="blogpost-body"><h3><span style="font-family: 楷体;">python基础篇</span></h3>
    <p><span style="font-family: 楷体;">&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/p/6847032.html" target="_blank">python 基础知识</a></strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6627631.html" target="_blank">python 初始python</a></strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/articles/7087609.html" target="_blank">python 字符编码</a></strong></strong></span></p>
    <p><span style="font-family: 楷体;"><strong><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/6752157.html" target="_blank">python 类型及变量</a></strong></strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6847663.html" target="_blank">python 字符串详解</a></strong></span></p>
    <p><span style="font-family: 楷体;">&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/p/6850347.html" target="_blank">python 列表详解</a></strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6850496.html" target="_blank">python 数字元祖</a></strong></span></p>
    <p><span style="font-family: 楷体;">&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/p/6851820.html" target="_blank">python 字典详解</a></strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<strong><a href="http://www.cnblogs.com/guobaoyuan/p/6852131.html" target="_blank">python 集合详解</a></strong></strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/7087614.html" target="_blank">python 数据类型</a>&nbsp;</strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/6752169.html" target="_blank">python文件操作</a></strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/p/8149209.html" target="_blank">python 闭包</a></strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/6705714.html" target="_blank">python 函数详解</a></strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/7087616.html" target="_blank">python 函数、装饰器、内置函数</a></strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/7087629.html" target="_blank">python 迭代器 生成器</a>&nbsp;&nbsp;</strong></span></p>
    <p><span style="font-family: 楷体;"><strong>&nbsp; &nbsp;<a href="http://www.cnblogs.com/guobaoyuan/articles/6757215.html" target="_blank">python匿名函数、内置函数</a></strong></span></p>
    </div>
    '''
    1,找到所有的span标签的内容
    ret = re.findall('<span(.*?)>', s1)
    print(ret)
    
    2,找到所有a标签对应的url
    print(re.findall('<a href="(.*?)"',s1))    
    

    便于理解

    /fo+/ 因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。 等价于{0,}
    
    /eg*/ 因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。等价于{1,} 
    
    /Wil?/ 因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者“Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。等价于{0,1}
    
    ^  匹配字符串的开始位置,在集合([])中表示“非
    
  • 相关阅读:
    Android JNI 使用的数据结构JNINativeMethod详解 .
    datatable的部分问题处理(动态定义列头,给某行添加事件,初始显示空数据)
    关于boostrap的modal隐藏问题(前端框架)
    三丰云服务器的基本使用(端口)
    Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
    云服务器内,nginx安装部署,Xshell,Xftp安装
    免费云服务器的申请(三丰云)
    vue的组件化运用(数据在两个组件互传,小问题总结)
    vue的表单编辑删除,保存取消功能
    datatable动态列处理,重绘表格(敲黑板,划重点!!!我肝了一天半才彻底弄懂这个东西,TAT)
  • 原文地址:https://www.cnblogs.com/tutougold/p/11267994.html
Copyright © 2011-2022 走看看