python:正则语法

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

    正则语法

    • 单个字符
      普通字符:就是一对一的完整匹配
      []:匹配指定范围内的任意一个字符
      [abc]:任意一个字符
          [0-9]:所有的数字
          [a-zA-Z]:所有的字母
          [^0-9]:除了数字以外的字符
      \d:数字字符,等价于[0-9]
      \D:非数字字符,等价于[^0-9]
      \w:所有的字(数字、下划线、字母汉字等)
      \W:非字
      \s:匹配空白字符(空格、\n、\t、\r)
      \S:非空白字符
      \b:词边界(开头、结尾、空格、标点)
      \B:非词边界
      . :匹配除\n以外的任意字符
    • 次数限定
      格式 说明
      {m} m次
      {m, n} m~n次
      {m,} 至少m次
      {,m} 至多m次
      ? 至多一次
      + 至少一次
      * 任意次数
    • 边界判断
      • ^:以指定的内容开头
      • $:以指定的内容结尾
      • 示例:
      import re
      
      # ^:以指定内容开头
      # c = re.compile(r'^hello')
      # $:以指定内容结尾
      c = re.compile(r'hello$')
      
      s = c.search('hakshehello')
      
      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('sahdjabbbbbasdja')
      
      if s:
          print(s.group())
    • 匹配模式
      import re
      
      # re.I:忽略大小写的匹配
      s = re.search(r'hello', 'Helloworld', re.I)
      
      if s:
          print(s.group())
      
      # re.M:多行匹配,默认是单行
      s = re.search(r'^hello', 'ashdjah\nhellosdajdksa', re.M)
      
      if s:
          print(s.group())
      
      string = '''<div>
      xxx
      </div>'''
      # re.S:单行处理,可以让.匹配包括\n的字符
      s = re.search(r'<div>.*?</div>', string, re.S)
      
      if s:
          print(s.group())
    • 分组匹配
      • 示例一:
      import re
      
      c = re.compile(r'(\d+)([a-z]+)(\d+)')
      
      s = c.search('adhaksj123dshfjsl456kdasdj')
      
      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.group(3), s.span(3))
          # 匹配的所有组信息
          print(s.groups())
      • 示例二:
      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('<div><a>千锋教育</div></a>')
      
      if s:
          print(s.group())
          # 所有的匹配信息,适用于所有分组
          print(s.groups())
          # 所有的匹配信息,是一个字典,用于命名分组
          print(s.groupdict())

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

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

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