• Day 18 正则表达式.


    一、字符

    .匹配除换行符以外的任意字符. 

    w 匹配字母数字或者下划线.

    s 匹配任意的空白符

    d 匹配数字 

    匹配一个换行符

    匹配一个制表符

    ^ 匹配字符串的开始.

    $ 匹配字符串的结尾.

    W 匹配非字母或者数字下划线 

    D 匹配非数字 

    S 匹配非空白符

    a|b 

    ()  匹配空号内的表达式 ,也表示一个组 

    [...]匹配字符组中的字符.

    [^....] 匹配除了字符组中字符的所有字符.

    量词 :

    二、量词

    * 重复零次或者更多次

    +重复一次或者更多次

    ?重复零次或者一次

    {n}重复n次

    {n,}重复n次或者更多次 

    {n,m}重复n到m次

    #* + ? { }实例:
    import re
    obj1=re.findall('李.?','李杰和李莲英和李二棍子')
    print(obj1) #['李杰', '李莲', '李二'],?表示匹配0或者1次,即匹配李后面任意字符1次


    obj2=re.findall('李.*','李杰和李莲英和李二棍子')
    print(obj2) #['李杰和李莲英和李二棍子'],*表示匹配0次或者多次,即匹配李后面任意字符多次


    obj3=re.findall('李.+','李杰和李莲英和李二棍子')
    print(obj3) #['李杰和李莲英和李二棍子'],+表示匹配1次或者多次,即匹配李后面任意字符多次


    obj3=re.findall('李.{1,2}','李杰和李莲英和李二棍子')
    print(obj3) #['李杰和', '李莲英', '李二棍'],{1,2}表示匹配1到2次,即匹配李后面任意字符2次

    非贪婪模式 用法说明
    *? 
    重复0次或更多次,但尽可能少重复
    +?
    重复1次或更多次,但尽可能少重复
    ?? 
    重复0次或1次,但尽可能少重复
    {n,}?
    重复n次以上,但尽可能少重复
    {n,m}?
    重复n到m次,但尽可能少重复

    import re
    obj1=re.findall('李.??','李杰和李莲英和李二棍子')
    print(obj1) #输出结果:['李', '李', '李']


    obj2=re.findall('李.*?','李杰和李莲英和李二棍子')
    print(obj2) #输出结果:['李', '李', '李']


    obj3=re.findall('李.+?','李杰和李莲英和李二棍子')
    print(obj3) #输出结果:['李杰', '李莲', '李二']


    obj3=re.findall('李.{1,2}?','李杰和李莲英和李二棍子')
    print(obj3) #输出结果:['李杰', '李莲', '李二']

    import re
    obj1=re.findall('李.??','李杰和李莲英和李二棍子')
    print(obj1) #输出结果:['李', '李', '李']
    obj2=re.findall('李.*?','李杰和李莲英和李二棍子')
    print(obj2) #输出结果:['李', '李', '李']
    obj3=re.findall('李.+?','李杰和李莲英和李二棍子')
    print(obj3) #输出结果:['李杰', '李莲', '李二']
    obj3=re.findall('李.{1,2}?','李杰和李莲英和李二棍子')
    print(obj3) #输出结果:['李杰', '李莲', '李二']

    4、字符集[]和[^]

     

    import re
    obj1=re.findall('李.[杰莲英二棍子]*','李杰和李莲英和李二棍子')
    print(obj1) #输出结果:['李杰', '李莲英', '李二棍子']
    obj2=re.findall('李.[^和]*','李杰和李莲英和李二棍子')
    print(obj2) #输出结果:['李杰', '李莲英', '李二棍子'],表示匹配李后面不是和的任意字符
    obj3=re.findall('[d]','456bdha3')
    print(obj3) #输出结果:['4', '5', '6', '3'],表示匹配任意一个数字
    obj3=re.findall('[d]+','456bdha3')
    print(obj3) #输出结果:['456', '3'],表示匹配任意个数字

     5、分组()与或|

     身份证号码是由15位或者18位的字符组成,如果是15位,首位不能是0,其他位数均为数字,如果是18位,则最后一位可能是数字或者X,用正则表达式匹配的两种方式如下:

    正则表达式 结果说明
    ^[1-9]d{14}(d{2}[0-9x])?$
    ()表示分组,将d{2}[0-9x]分成一组,就可以整体约束他们出现的次数为0-1次
    ^([1-9]d{16}[0-9x]|[1-9]d{14})$
    表示先匹配[1-9]d{16}[0-9x]如果没有匹配上就匹配[1-9]d{14}
  • 相关阅读:
    C++test 关于resource参数和include/exclude参数说明
    开发程序 ip 127.0.0.0 0.0.0.0原理与区别
    安装rails旧版本出错bin_path': can't find gem railties (["3.0.5"]) with executable rails (Gem::GemNotFoundException)
    rails excel的创建
    ruby nil? empty? blank? 的区别
    rails 调试工具pry 换掉debugger 和 rails c
    rails respond_to 的原理与使用
    rails transaction 的用法
    ssh的传送文件命令
    出现了pid的错误A server is already running. 和如何改变webrick的端口值
  • 原文地址:https://www.cnblogs.com/mengbin0546/p/8479035.html
Copyright © 2020-2023  润新知