zoukankan      html  css  js  c++  java
  • 008---re正则模块

    re正则模块

    • 字符串的匹配规则
    • 匹配模式
      • re.match()
      • re.search()
      • re.findall()
      • re.split()
      • re.sub()
    • 元字符
    print('--------------匹配单个字符与数字--------------')
    
    r'''
    .           匹配除换行符以外的任意字符
    [0-9]       匹配数组字符集合,表示括号内任意一个字符
    [jiangwei]  匹配括号内任意一个字符
    [a-z]       匹配任意小写字母
    [A-Z]       匹配任意大写字母
    [0-9a-zA-Z_]匹配任意数字,字母和下划线
    [^sunck]    匹配除了sunck以外的所以字母,^表示脱字符,表示不匹配集合中的字符
    [^0-9]      匹配所有的非数字字符
    d          匹配数字,效果[0-9]
    D          匹配非数字字符,效果[^0-9]
    w          匹配数字,字母下划线,效果[0-9a-zA-Z_]
    W          匹配非数字,字母下划线,效果[^0-9a-zA-Z_]
    s          匹配任意的空白符(空格,换行,换页,制表),效果[ f
    
    	]
    S          匹配任意的非空白符
    '''
    print(re.findall('d','sunck is a22 go999od man111'))
    
    
    print('--------------锚字符(边界字符)----------------')
    
    '''
    ^       行首匹配,和[]里的不是一个意思
    $       行尾匹配
    A      匹配字符串开始,它和^的区别是A只匹配整个字符串的开头,即使在re.M模式下也不匹配到他行的行首
          匹配字符串开始,它和$的区别是A只匹配整个字符串的开头,即使在re.M模式下也不匹配到他行的行尾
          匹配一个单词的边界,也就是一个单词和空格间的位置
    B      匹配非单词边界
    '''
    
    
    print('-----------------匹配多个字符----------------')
    '''
    说明:下方的xyz均为假设的普通字符,n,m是非负整数,不是正则表达式的元字符
    (xyz)       匹配小括号内的xyz(作为一个整体去匹配)
    x?          匹配0个或者1个x
    x*          匹配0个或者任意多个x(.*表示匹配0个或者任意多个字符,换行符除外)
    x+          匹配至少一个x
    x{n}        匹配确定个数的n个x(n是一个非负整数)
    x{n,m}      匹配至少n个最多m个x
    x|y         |表示或,匹配的是x  or  y
    '''
    
    
    
    print('-----------特殊----------')
    '''
    *?  +?  x?  最小匹配,通常都是尽可能多的匹配,可以使用这种带问号的解决贪婪匹配
    (?:x)       类似(xyz),但不表示一个组
    '''
    
    • 三个常用方法
    import re
    
    '''
    re.match()函数
    
    功能:尝试从字符串的起始位置匹配,如果不是起始位置匹配成功,返回None
    原型:match(patter,string,flags=0)
    参数:pattern:匹配的正则表达式
         string:要匹配的字符串
         flags:标志位,用于控制正则表达式的匹配方式
    re.I   忽略大小写
    re.L   做本地户识别 
    re.M   多行匹配,影响`和$
    re.S   是.匹配包括换行符在内的所有字符
    re.U   根据unicode字符集解析字符,影响w W  B
    re.X   使我们以更灵活的格式理解正则表达式
    
    
    re.search()函数
    功能:扫描整个字符串,并返回第一个成功的匹配
    '''
    # www.baidu.com
    print(re.match('www','www.baidu.com'))
    print(re.match('www','ww.baidu.com'))
    print(re.match('www','wwW.baidu.com',re.I))
    print(re.match('www','baidu.www.com'))
    
    
    '''
    re.search()函数
    原型:match(patter,string,flags=0)
    参数:pattern:匹配的正则表达式
         string:要匹配的字符串
         flags:标志位,用于控制正则表达式的匹配方式
    功能:扫描整个字符串,并返回第一个匹配成功的
    
    '''
    print(re.search('sunck','good man is sunck!sunck is nice'))
    
    '''
    re.findall()函数
    原型:match(patter,string,flags=0)
    参数:pattern:匹配的正则表达式
         string:要匹配的字符串
         flags:标志位,用于控制正则表达式的匹配方式
    功能:扫描整个字符串,并返回一个列表
    '''
    print(re.findall('sunck','good man is sunck!sunck is nice'))
    
    • 其他方法
    import re
    
    '''
    字符串切割
    '''
    str1="sunck      is a good man"
    print(str1.split(" "))
    print(re.split(r" +",str1))
    
    '''
    字符串的替换和修改:sub(pattern, repl, string, count=0, flags=0)、subn
    参数:
        repl    指定用来替换的字符串
        string  目标字符串
        count   最多替换次数
    
    功能:在目标字符串中,以正则表达式的规则,匹配字符串,再替换。
    区别:前者返回一个,后者是被替换的次数被替换的字符串,后者返回一个元祖,前者是被替换的字符串。
    '''
    str3='sunck is a good good good man'
    print(re.sub(r"(good)","nice",str3,count=2))    # type string
    print(re.subn(r"(good)","nice",str3,count=2))   # type tuple
    
    '''
    分组
    概念:除了简单的判断之外,正则表达式还有提取子串的功能。用()表示的就是就是提取分组
    '''
    str4='010-53247654'
    m=re.match(r"((?P<first>d{3})-(?P<last>d{8}))",str4)
    # 使用序号获取对应组的信息,group(0)表示原始字符串
    print(m.group(0))
    print(m.group(1))
    print(m.group("first"))
    print(m.group(3))
    print(m.groups())
    
    '''
    编译:当我们使用正则表达式时,re模块会做两件事
    1、编译正则表达式,如果正则表达式本身不合法,会报错
    2、用编译后的正则表达式去匹配对象
    '''
    
    # 之前使用
    pat=r"1(([3587])d|(47))d{8}$"
    print(re.match(pat,"13006293101"))
    
    # 编译成对象使用
    re_telephon = re.compile(pat)
    print(type(re_telephon))
    print(re_telephon.match("13600000000"))
    
  • 相关阅读:
    Java设计模式之原型模式
    Java设计模式之单例模式
    Java设计模式之抽象工厂模式
    Java设计模式之工厂方法模式
    redis常用配置参数详解
    Maven版本的ssm框架项目常见依赖pom.xml
    Maven中setting.xml配置Demo
    Linux中安装jdk
    Linux中查看jdk安装目录、Linux卸载jdk、rpm命令、rm命令参数
    Hibernate主键生成策略
  • 原文地址:https://www.cnblogs.com/xjmlove/p/10339384.html
Copyright © 2011-2022 走看看