正则表达式常用知识点记录

334 阅读2分钟

正则表达式

特殊字符

  • .: 匹配任意字符(除了\n 之外)
  • \d:匹配任意一个阿拉伯数字(0 到 9)。等价于 [0-9]
  • \D:匹配一个非数字字符。等价于[^0-9]
  • \w:匹配一个字母数字字符。等价于 [a-zA-Z0-9_]
  • \W:匹配一个非字母数字字符。等价于 [^a-zA-Z0-9_]
  • \s:匹配一个空白字符,包括空格、制表符、换页符和换行符。等价于 [ \f\n\r\t\v]
  • \S:匹配一个非空白字符。等价于 [^ \f\n\r\t\v]
  • \A:匹配字符串的起始,类似 startWidth
  • \Z:匹配字符串的结束,类似 endWidth

量词符号

  • re1|re2: 匹配 re1 或 re2
  • ^ : 匹配字符串的开头
  • $ : 匹配字符串的末尾
  • * : 匹配 0 个或多个的表达式
  • + : 匹配 1 个或多个的表达式
  • ? : 匹配 0 个或 1 个由前面的正则表达式定义的片段,非贪婪方式
  • {n}: 匹配 n 个的表达式
  • {m,n}:匹配 m 到 n 次由前面的正则表达式定义的片段,贪婪方式
  • [...]:用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
  • [...x-y...]:表示 x 到 y 之间的任何字符:[a-z] 匹配任何小写字母
  • [^...]:不在[]中的字符:[^abc] 匹配除了 a,b,c 之外的字符
  • \: 转义特殊字符,是之无效

组的概念

  • (...):匹配括号内的表达式,也表示一个组

贪婪与非贪婪

  • 贪婪:尽可能多的匹配,0 次或多次
  • 非贪婪:尽可能少的匹配,0 次或 1 次。通过?组合变成非贪婪

实例


def get_style(html):
# 获取style属性,如果不加 ?,则会匹配到最后一个 引号
    result = re.findall('style="(.*?)"', html)
    if len(result) != 0:
        print(result[0])
        return result[0]

if __name__ == "__main__":
    get_style('<div style="color:red;padding:12px;" class="title"></div>')