• python之正则表达式


    第一章 re模块

    1.什么是正则?

        和shell中的差不多
    

     正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

    元字符 匹配内容
    w 匹配字母(包含中文)或数字或下划线
    W 匹配非字母(包含中文)或数字或下划线
    s 匹配任意的空白符
    S 匹配任意非空白符
    d 匹配数字
    D 匹配非数字
    A 从字符串开头匹配
    z 匹配字符串的结束,如果是换行,只匹配到换行前的结果
    匹配一个换行符
    匹配一个制表符
    ^ 匹配字符串的开始
    $ 匹配字符串的结尾
    . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
    [...] 匹配字符组中的字符
    [^] 匹配除了字符组中的字符的所有字符
    * 匹配0个或者多个左边的字符。
    + 匹配一个或者多个左边的字符。
    匹配0个或者1个左边的字符,非贪婪方式。
    {n} 精准匹配n个前面的表达式。
    {n,m} 匹配n到m次由前面的正则表达式定义的片段,贪婪方式
    ab 匹配a或者b
    () 匹配括号内的表达式,也表示一个组

    第二章 练习

    #从字符串中全部查找内容,返回的是列表
    s = 'zbb张'
    print(re.findall('zbb',s))
    #['zbb']
    
    s = 'zbb张'
    #查找数字字母(中文),下划线
    print(re.findall('w',s)) 
    #['z', 'b', 'b', '张']
    
    
    #查找非数字,字母(中文),下划线
    s = 'zbb张@!'
    print(re.findall('W',s))
    #['@', '!']
    
    # 查找任意空格,换行符,制表符
    s = 'zbb张 @!
     	'
    print(re.findall('s',s))
    #[' ', '
    ', ' ', '	']
    
    # 查找非任意空格,换行符,制表符
    s = 'zbb张 @!
     	'
    print(re.findall('S',s))
    # ['z', 'b', 'b', '张', '@', '!']
    
    # 查找数字
    s = 'z12bb张 @!
     	'
    print(re.findall('d',s))
    # ['1', '2']
    
    # 查找非数字
    s = 'z12bb张 @!
     	'
    print(re.findall('D',s))
    # ['z', 'b', 'b', '张', ' ', '@', '!', '
    ', ' ', '	']
    
    # 查找是否以什么开头的内容
    s = 'z12bb张_zbb @!
     	'
    print(re.findall('^z',s))
    # print(re.findall('Az',s))
    # ['z']
    
    # 查找是否以什么结尾的内容
    s = 'z12bb张_zbb @!'
    print(re.findall('!$',s))
    # print(re.findall('!',s))
    # ['!']
    
    # 查找换行符,制表符
    s = 'z12bb张_zbb 
     	@!'
    print(re.findall('
    ',s))
    print(re.findall('	',s))
    # ['
    ']
    # ['	']
    
    # .只能匹配任意一个内容(非换行符)
    s = 'z
    b12bb张_z	b 
     	@!'
    print(re.findall('z.b',s))
    print(re.findall('z.b',s,re.DOTALL)) #可以匹配到换行符
    # ['z	b']
    # ['z
    b', 'z	b']
    
    s = 'z
    b12bbA张_z	b 
     	@!'
    print(re.findall("[a-z]",s))  # 小写的a,z
    print(re.findall("[A-Z]",s))  # 大写的A,Z
    print(re.findall("[A-Za-z]",s)) # 大写和小写的a,z A,Z
    print(re.findall("[a-z0-9]",s)) # 小写的a,z 数字 0,9
    # ['z', 'b', 'b', 'b', 'z', 'b']
    # ['A']
    # ['z', 'b', 'b', 'b', 'A', 'z', 'b']
    # ['z', 'b', '1', '2', 'b', 'b', 'z', 'b']
    
    # 查找非a-z的元素
    s = 'z
    b12bbA张_z	b 
     	@!'
    print(re.findall("[^a-z]",s))
    # ['
    ', '1', '2', 'A', '张'...]
    
    # * 匹配 0个多个  [贪婪匹配]
    s = 'z
    b12bbA张_z	b 
     	@!'
    print(re.findall("z*",s))
    #print(re.findall("z*b",s))
    
    #  匹配 1个多个  [贪婪匹配]
    s = 'zzzzb12bbA张_zb 
     	@!'
    print(re.findall("z+",s))
    #['zzzz', 'z']
    
    #   ? 匹配 0个或1个 [非贪婪匹配]
    s = 'zb12bbA张_zb 
     	@!'
    print(re.findall("z?",s))
    #['z', '', '', '', '', 'z', '', '....]
    
    #  s重复2次
    s = 'zb12bbA张_zbb 
     	@!'
    print(re.findall("b{2}",s))
    #['bb', 'bb']
    
    # 指定最少多少次,最多多少次
    s = 'zb12bbA张_zzbbzzz 
     	@!'
    print(re.findall("z{1,3}",s))   
    #['z', 'zz', 'zzz']
    
    # a|b 或
    s = 'zb12bbA张_zzbbzzz 
     	@!'
    print(re.findall("z|b",s))
    #['z', 'b', 'b', 'b', 'z', 'z', 'b', 'b', 'z', 'z', 'z']
    
    #  ?: 可以反回括号外的东西
    s = "meet_assdf_mssst_(.)mmns_aaamaaatmsssssssssssstt"
    print(re.findall("m(?:..)t",s))
    
    s = 'zaq_sb wqe_sb ritian_sb'
    print(re.findall("w+_sb",s))
    # print(re.findall("[a-z]+_sb",s))
    # ['zaq_sb', 'wqe_sb', 'ritian_sb']
    

    第三章 常用方法

    1. findall

    全部找到返回一个列表

    s = 'zaq_sb wqe_sb ritian_sb'
    print(re.findall("zaq",s))
    

    2.search

    从字符串中任意位置进行匹配查找到一个就停止了,返回的是一个对象. 获取匹配的内容必须使用.group()进行获取

    s = 'zaq_sb wqe_sb ritian_nb'
    print(re.search("sb|nb",s).group())
    

    3.match

    从字符串开始位置进行匹配

    #match 找到1个后就停止查找了,只从字符串的开头查找.找到后返回的是一个对象,查看元素.group()
    s = 'zaq_sb wqe_sb ritian_nb'
    print(re.match("zaq",s).group()) 
    #zaq
    #没有hui报错
    

    4.spilit 分割

    s = 'zaq_sb w:qe_sb#rit!ian_*nb'
    print(re.split("[#,:!*]",s))
    

    5.sub 替换

    print(re.sub("barry","太亮",'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。'))
    

    6.compile

    定义匹配规则(无用)

    obj = re.compile("w")
    print(obj.findall("zbb只能给你"))
    

    7.finditer

    返回的是一个迭代器

    g = re.finditer("w","zbb:可是我还你想啊!")
    print(next(g).group())
    for i in g:
        print(i.group())
    

    8.给分组起名字

    print(re.search("(?P<tag_name>w+)w+w+","h1hellh1"))
    print(re.search("(?P<aaa>w+)dfa","asbsadfasdfa").group("aaa"))
    print(re.search("(?P<cx>w+)dfa","asbsadfasdfa").group())
    
  • 相关阅读:
    Intent跳转到系统应用中的拨号界面、联系人界面、短信界面及其他
    android intent 跳转
    Android Intent 使用整理
    Android实现界面跳转
    android获取手机信息大全
    Android中实现Gallery 点击放大
    Android之TextView 详细字典
    Android发展简介
    如何成为Android高手
    系统测试阶段:
  • 原文地址:https://www.cnblogs.com/zdqc/p/11266342.html
Copyright © 2020-2023  润新知