正则表达式

正则表达式:用正则符号来描述字符串规则

re模块

提供了Python中所有和正则相关的函数

  1. fullmatch(正则表达式,字符串) 判断整个字符串是否满足正则表达式,匹配成功返回对象,不匹配返回None

    print(fullmatch(r'\d{3}', '234'))
    print(match(r'\d{3}', '234卡咖啡'))
    
  2. findall(正则表达式,字符串) 提取字符串中所有满足正则表达式的字符串,默认返回一个列表,了;列表中的元素是所有匹配到的子串(存在自动捕获的现象)

    msg = """
    'name:"jshf2-
    2ss技术"'
    """
    result = findall(r'(?s)name:"(.+)"', msg)
    print(result)
    
  3. search(正则表达式,字符串) 匹配字符串中满足正则表达式的第一个字符串,匹配成功返回匹配对象,匹配失败返回None

  4. split(正则表达式,字符串,[N]) 按照所有满足正则表达式的子串进行切割(N代表切割n次)

    str1 = '技术7晋级赛7jsks7就开始看'
    print(str1.split('7', 2))
    
    str1 = '技术22晋级赛709jsks511就开始80看'
    print(split(r'\d+', str1, 2))
    
  5. finditer(正则表达式,字符串) 获取字符串中所有满足正则的子串返回一个迭代器,迭代器中的元素是匹配对象(有分组存在时,最好用finditer)

    str1 = '技术22晋级赛709jsks511就开始80看'
    result = finditer(r'\d+', str1)
    print(list(result))
    
  6. sub(正则表达式,字符串1,字符串2,[N]) 将字符串2中所有满足正则的子串都替换成字符串1替换n次

    str1 = '技术22晋级赛709jsks511就开始80看'
    print(sub(r'\d', '+', str1))
    
    message = '妈的,SB,都打起来了你还在打野!草!F u c k'
    print(sub(r'(?i)妈的|sb|草|操|艹|f\s*u\s*c\s*k', '*', message))
    
  7. match(正则表达式,字符串) 匹配字符串开头

正则表达式(r’')语法

  1. 匹配类符号 - 描述字符

    1. 普通字符

      from re import fullmatch
      
      print(fullmatch(r'abc','abc'))
      # 结果为TRUE
      
    2. . 表示匹配任何字符

      # 表示3个字符开头是a最后是c
      r'a.c'
      # abc	acc aqc 都能匹配
      
      
    3. \d 表示匹配任意一个数字字符

      r'a\dc'
      # a1c a2c a3c都能匹配
      
    4. \s 表示匹配一个空白字符

      # 空格 回车 \t
      r'a\sc'
      # a c 
      
    5. \w 匹配一个任意字母数字下划线

    6. \D \S \W 功能与小写相反

    7. [字符集] 匹配字符集中任意一个字符

      # 1.在中括号中提供多个祖父(匹配任意一个)
      r'[adb]'
      # 2.表示范围(匹配字符1到字符2 编码值范围内的任意一个字符)
      r'[字符1-字符2]' #字符1的编码值必须小于字符2的编码值
      r'[\u4e00-\u9fa5]'	#匹配中文
      r'[a-zA-Z]' 	#匹配小写字母a到小写字母z和大写字母A到大写字母Z
      # c.在中括号中包含\开头的特殊符号
      r'[\da-z]' #匹配数字和小写字母
      r'[\d\u4e00-\u9fa5]	#匹配数字和中文
      
    8. [^字符集]匹配不在字符集中的任意字符

  2. 匹配次数

    1. + 匹配一次或多次(控制加号前的匹配次数)

      r'a+' #匹配一个或多个a
      r'\d+a' #匹配一个或者多个数字和a
      r'a[1-5]c' 
      'a234c'
      
    2. *匹配0次和任意次数

    3. 匹配一次或0次

    4. {}

      1. {N} 匹配N次
      2. {M,N} 匹配M-N次
      3. {M,} 匹配至少M次
      4. {,N} 匹配最多N次
    5. 贪婪和非贪婪

      1. 贪婪

        + * {} {N} {M,N} {M,} {,N}

        在匹配成功或者多种匹配次数都可以匹配成功的时候,贪婪取最多的次数进行匹配

        match(r'a.+b','amnb还b上课')#匹配amnb
        
      2. 非贪婪(匹配次数后面加问号)

        +? *? {}? {N}? {M,N}? {M,}? {,N}?

        在多种匹配次数都可以匹配成功的时候,非贪婪取最少的次数进行匹配

        match(r'a.+?b','amnb还b上课')#匹配amnb还b
        
  3. 分组和分支

    1. 分组 ()正则表达式中可以用()将部分内容括起来表示一个整体,括号括起来的部分就是一个分组

      1. 整体操作

        控制整体匹配次数

        # '23k' ,'23j24k23m','12b32n43n54n31k'
        result = fullmatch(r'(\d\d[a-z])+','23j24k23m')
        
      2. 重复匹配

        正则中可以通过\M来重复他前面第M个分组匹配的结果

        # '99k99' '78k78'
        result = fullmatch(r'(\d\d)[a-z]\1','78k78')
        result = fullmatch(r'(\d\d)[a-z]\1{2}','78k7878')
        
      3. 捕获

        提取分组匹配到的结果(分为自动捕获findall和手动捕获)

        自动捕获

        # findaLl在正则表达式中有分组的时候,会自动提取正则匹配结果中分组匹配到的内容
        message="技术上234, jsskf8992==技术njk==9223-ssjs233结束时间453‘
        result = findall(r' [1u4e00-1u9fa5]C1d+)’,message)
        print(result)
        

        手动捕获

        # 匹配对象.group(N)
        message = 我是小明,今年23岁,身高180厘米,体重7okg’
        result = search(r’身高(\d+〕厘米,体重(\d+)kg’, message)
        print (result)
        # 
        print(result.group ())
        # '身高180厘米,体重7okg’
        print(result.group (1), result.group (2))
        # 180 70
        
    2. 分支

      正则1|正则2|正则3|.... ---------先用正则1进行匹配,匹配成功直接成功,匹配失败用正则2进行匹配

      result = fullmatch(r'abc\d\d|abc[A-Z]{2}','abc12')
      result = fullmatch(r'abc(\d\d|[A-Z])','abc12')
      
  4. 检测类符号

  5. 转义符号

    在本身具有特殊功能或特殊意义的符号前加\,让特殊符号变成普通符号

    result = fullmatch(r'\d\d\.\d\d','23.66')
    print(result)
    result = fullmatch(r'\d\d\+\d\d','23+66')
    print(result)
    

    独立存在有特殊意义的符号在[]中他的功能会消失,也就是在中括号中想要有特殊意义的字符有功能,则需要在该字符前加上\

    result = fullmatch(r'\[\d\d\+\d\d\]','[23+66]')
    print(result)
    

忽略大小写:

  1. 在正则表达式前加(?i)

    fullmatch(r'(?i)abc''abc')
    

单行匹配:

在正则表达式前加上(?s)

  1. 多行匹配:.不能和换行符进行匹配

    fullmatch(r'abc.123','abc\n123')	#匹配失败返回None
    
  2. 单行匹配

    fullmatch(r'(?s)abc.123','abc\n123')	#匹配成功返回匹配对象
    

你可能感兴趣的:(正则表达式,python,开发语言)