正则表达式

正则表达式简介

  • 概念
    • 正则表达式是对字符串操作的⼀种逻辑公式,就是⽤事先定义好的⼀些特定字
      符、及这些特定字符的组合,组成⼀个“规则字符串”,这个“规则字符串”⽤来
      表达对字符串的⼀种过滤逻辑
  • 应用
    • 表单验证
    • 爬虫

普通字符

  • 字⺟、数字、汉字、下划线、以及没有特殊定义的符号,都是”普通字符”。正则 表达式中的普通字符,在匹配的时候,只匹配与⾃身相同的⼀个字符。 例如:表达式c,在匹配字符串abcde时,匹配结果是:成功;匹配到的内容 是c;匹配到的位置开始于2,结束于3。

match函数

  • match( pattern , string , flags =0)
  • 第⼀个参数是正则表达式,如果匹配成功,则返回⼀个match对象,否则返 回⼀个None
  • 第⼆个参数表示要匹配的字符串
  • 第三个参数是标致位⽤于控制正则表达式的匹配⽅式 如: 是否区分⼤⼩写,多⾏匹配等

元字符

  • 用来表示一些特殊含义或功能的字符
    • . 小数点可以匹配除了换行以外的任意字符
    • | 逻辑或操作字符
    • [] 匹配字符集
    • [^] 取反操作
    • -定义[]里面的一个字符区间如[a-z]
    • \ 对紧跟其后的一个字符进行转义
    • ()对表达式进行分组,将括号内的内容当做一个整体
  • 预定义匹配的字符集
    • 可以同时匹配某个与定义字符集中的任意一个字符
    • \d 任意数字
    • \w 任意一个字母数字或下划线 汉字
    • \s 空格 制表符 换页符的空白字符的其中任意一个
    • \D \d的取反 也就是非数字的任意一个字符
  • 重复匹配
    • 前⾯的表达式,⽆论是只能匹配⼀种字符的表达式,还是可以匹配多种字符其
      中任意⼀个的表达式,都只能匹配⼀次。但是有时候我们需要对某个字段进⾏
      重复匹配,例如⼿机号码13666666666,⼀般的新⼿可能会写成 \d\d\d\d\d\d\d\d\d\d\d(注意,这不是⼀个恰当的表达式),不但写着费 劲,看着也累,还不⼀定准确恰当。
      这种情况可以使⽤表达式再加上修饰匹配次数的特殊符号{},不但重复书写表达 式就可以重复匹配。例如[abcd][abcd]可以写成[abcd]{2}
    • {n} 表达式重复n次
    • {m,n} 至少m次 至多n次
    • {m,}至少m次
    • ?匹配0或1次
    • +匹配至少1次
    • *匹配任意次
  • 位置匹配
    • 有时候,我们对匹配出现的位置有要求,⽐如开头、结尾、单词之间等等
    • ^ 在字符串开始的地方匹配,符号本身不匹配任何字符
    • $ 在字符串结尾的地方匹配
    • \b匹配一个单词边界 可以使单词和空格之间的位置
    • \B 匹配非单词边界 即左右都是\w 或者左右两边都不是\w
  • 贪婪与非贪婪模式
    • 在重复匹配时,正则表达式默认总是尽可能多的匹配,这被称为贪婪模式。例
      如,针对⽂本dxxxdxxxd,表达式(d)(\w+)(d)中的\w+将匹配第⼀个d和Y后⼀ 个d之间的所有字符xxxdxxx。可⻅,\w+在匹配的时候,总是尽可能多的匹配 符合它规则的字符。同理,带有?、*和{m,n}的重复匹配表达式都是尽可能地多匹配

re模块常用方法

  • compile(pattern[flags]) 根据包含正则表达式的字符串创建模式对象 返回值:re对象
  • search(pattern,string[,flags]) 在字符串查找 返回值为第一个匹配到的对象或None
  • match(pattern,string[,flags]) 在字符串开始处匹配 返回值为字符串开头匹配的对象或None
  • split(pattern,string[,maxsplit=0,flags]) 根据模式的匹配项来分割字符串 返回值为分割后的字符串列表
  • findall(pattern,string,flags) 列出字符串中模式的所有匹配项,返回值为所有匹配到的字符串列表
  • sub(pat,repl,sttring[,count=0,flags])将字符串中所有pat替换为repl 返回值为替换后的字符串
  • flag 匹配模式
    • re.A ASCII字符模式
    • re.;l是匹配对大小写不敏感
    • re.L 做本地化识别匹配
    • re.M 多行匹配
    • re.S 使.这个通用匹配符能够匹配包括换行在内的所有字符
    • re.U 根据unicode字符集解析字符 这个标志影响\w \W ,\B \b
    • re.X 通过给予你更灵活的格式,一遍你讲正则表达式写得更易于理解
  • 分组功能
    • Python的re模块有⼀个分组功能。所谓的分组就是去已经匹配到的内容再筛选 出需要的内容,相当于⼆次过滤。实现分组靠圆括号(),⽽获取分组的内容靠的 是group()、groups(),其实前⾯我们已经展示过。re模块⾥的积个重要⽅法在 分组上,有不同的表现形式,需要区别对待