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

ernestwang 1248 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条评论)

还木有评论哦,快来抢沙发吧~

复制成功
微信号: irenyuwang
关注微信公众号,站长免费提供流量增长方案。
我知道了