正则表达式:正则表达式语法大全

    Python编程 wuya 136次浏览 已收录 0个评论

    正则语法

    • 单个字符
      符号 说明
      普通字符 一对一的完整匹配
      [] 范围内的任意一个字符,-表示ascii连续的字符,^表示取反的意思
      \d 任意的数字字符,等价于[0-9]
      \D 任意的非数字字符,等价于[^0-9]
      \w 任意的字(数字、字母|汉字、下划线)
      \W 非字
      \s 空白字符(空格、\n、\t、\r)
      \S 非空白字符
      \b 单词边界(开头、结尾、空格、标点)
      \B 非词边界
      . 匹配除\n以外的任意字符
    • 次数限定
      格式 说明
      {m} 指定m次
      {m,n} m~n次
      {m,} 至少m次
      {,n} 至多n次
      ? 至多一次
      + 至少一次
      * 任意次,相当于{,}
    • 边界判断
      • ^:以指定的内容开头
      • $:以指定的内容结尾
      • 示例:
      import re
      
      # ^:以指定字符开头
      # s = re.search(r'^hello', 'hello world')
      
      # $:以指定字符结尾
      s = re.search(r'hello$', 'world hello')
      
      if s:
          print(s.group())
    • |的使用
      import re
      
      # |:或的意思,拥有最低的优先级
      # 如果想要指定优先级可以使用()
      c = re.compile(r'hell(o|w)orld')
      
      # s = c.search('helloorld')
      s = c.search('hellworld')
      
      if s:
          print(s.group())
    • 贪婪匹配
      • 贪婪:在满足条件的情况下,最大限度的匹配。正则的匹配默认是贪婪的。
      • 非贪婪:只要满足条件,能少匹配就少匹配。
      • 示例:
      import re
      
      # ?可以取消.+至少一次的贪婪匹配
      # c = re.compile(r'a.+?b')
      
      # ?可以取消.*任意多次的贪婪匹配
      c = re.compile(r'a.*?b')
      
      s = c.search('sdkabbbbbsdj')
      
      if s:
          print(s.group())
    • 匹配模式
      import re
      
      # re.I 忽略大小写的匹配
      # s = re.search(r'hello', 'Hello', re.I)
      
      # re.M 多行匹配,默认是单行匹配
      # s = re.search(r'^hello', 'world\nhello', re.M)
      
      string = '''<div>
      xxx
      </div>'''
      # re.S 单行匹配,使.可以匹配包含\n在内的任意字符
      s = re.search(r'<div>.*</div>', string, re.S)
      
      if s:
          print(s.group())
    • 分组匹配
      • 示例1:
      import re
      
      '''
      c = re.compile(r'(\d+)([a-z]+)(\d+)')
      
      s = c.search('ahake123hello456sjhfakls')
      
      if s:
          # 完整的匹配结果
          print(s.group(), s.span())
          # 功能同上
          print(s.group(0), s.span(0))
          # 第一个()的内容
          print(s.group(1), s.span(1))
          print(s.group(2), s.span(2))
          # 匹配的所有组信息
          print(s.groups())
      '''
      
      # 匹配的结果将会按照()进行分割
      c = re.compile(r'((\d+)([a-z]+)(\d+))')
      f = c.findall('ahake123hello456sjhfakls')
      print(f)
    • 示例2:
      import re
      
      # c = re.compile(r'<div><a>\w+</a></div>')
      
      # 无名分组:\1表示前面第一组的内容,就是第一个()匹配的内容
      c = re.compile(r'<([a-z]+)><([a-z]+)>\w+</\2></\1>')
      # 命名分组:
      c = re.compile(r'<(?P<goudan>[a-z]+)><(?P<dahua>[a-z]+)>\w+</(?P=dahua)></(?P=goudan)>')
      
      s = c.search('<div><a>千锋教育</a></div>')
      # s = c.search('<b><a>千锋教育</b></a>')
      
      if s:
          print(s.group())
          # 所有的分组匹配信息,是个元组
          print(s.groups())
          # 所有的分组匹配信息,是个字典,用于命名分组
          print(s.groupdict())

    学海无涯 , 版权所有丨如未注明 , 均为原创丨转载请注明正则表达式:正则表达式语法大全
    喜欢 (0)
    发表我的评论
    取消评论
    表情 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址