1. 一些常见的匹配规则

    模式描述
    \w匹配字母、数字及下划线
    \W匹配不上字母、数字及下划线的字符
    \s匹配任意空白字符,等价于[\t\n\r\f]
    \S匹配任意非空字符
    \d匹配任意数字,等价于[0-9]
    \D匹配任意非数字的字符
    \A匹配字符串开头
    \Z匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串
    \z匹配字符串结尾,如果存在换行,同时还会匹配换行符
    \G匹配最后匹配完成的地方
    \n匹配一个换行符
    \t匹配一个制表符
    ^匹配一行字符串的开头
    $匹配一行字符串的结尾
    .匹配任意字符,除了换行符
    [...]用来表示一组字符,单独列出,比如[amk]匹配a、m或k
    [^...]不在[]中的字符,比如[^abc]匹配除了a、b、c之外的字符
    *匹配 0 或多个表达式
    +匹配 1 或多个表达式
    撇皮 0 或 1 个前面的正则表达式定义的片段,非贪婪模式
    精确匹配 n 个前面的表达式
    {n,m}匹配 n 到 m 次由前面正则表达式定义的片段,贪婪模式
    a|b匹配 a 或 b
    ()匹配括号内的表达式,也表示一个组
  2. match()

    1. 第一个参数传正则表达式,第二个参数传要匹配的字符串

    2. 返回的对象中:

      • group() :获取到 匹配的内容
      • span() : 获取匹配的范围
    3. 分组:

      可以通过 括号 对某段匹配规则分组,使用 group() 可以获取到对应分组匹配到的数据,比如 group(1)

    4. 通用匹配
      可以使用 .*(点星) 来匹配任何字符,因为 .(点) 代表可以匹配任何除了换行外的字符, *(星) 表示可以匹配多次,所以 .*(点星) 就是匹配任意字符。

    5. 贪婪和非贪婪

      贪婪:
      .* 会尽可能匹配多的字符,其他的字符就会匹配比较少

      非贪婪:
      .*? 会尽可能的少匹配,给其他匹配跟多的字符

    6. 修饰符

      修饰符描述
      re.I是匹配对大小写不敏感
      re.L做本地话识别(locale-aware)匹配
      re.M多行匹配,影响^和$
      re.S使 . 匹配包括换行在内的所有字符
      re.U根据 Unicode 字符集解析字符。 影响\w, \W, \b, \B
      re.X通过给予你更灵活的格式以便将正则表达式写的更易于理解

      一般比较常用的是 re.S 和 re.I。

      用法是在 match() 后面把这个值当第三个参数传入。

  3. search()

    由于 match() 是从开头才开始匹配的,如果开头不匹配就会导致全部匹配失败。

    search() 是在字符串中搜索能够匹配上字符串,如果有就返回第一个匹配的内容,如果没有就返回 None 。

  4. findall()

    search() 搜索的是第一个匹配对象,如果要匹配多个,就要用 findall()

  5. sub()

    sub() 可以用来修改匹配的内容。

  6. compile()

    compile() 可以先把 正则字符串 编译成正则表达式对象,以便在后面的匹配中复用。