Python正则表达式学习笔记

Python正则表达式学习笔记

正则表达式

​ 对文本内容的搜索,定位,提取是逻辑比较复杂的工作。

定义:
文本的高度匹配模式,其本质是由一系列字符和特殊符号构成号构成的字串,这个字串即正则表达式。

原理:
通过普通字符和有特殊含义的字符,来组成字符串,用以描述一定的字符串规则,比如:重复,位置等,来表达某类特定的字符串,进而匹配。

目标:
1. 熟练掌握元字符
2. 能够读懂常用正则表达式,编辑正则规则
3. 熟练使用re模块操作正则表达式

1. 单字匹配

  • 元字符使用
  • 普通字符,匹配其自身
    元字符之外的字符,正则表达大python中也可以匹配中文
    1. 或关系: 元字符:|
      匹配规则: 匹配|两侧任意的正则表达即可
    2. 匹配单个字符: 元字符:.
      匹配规则: 匹配除换行外的任意一个字符
    3. 匹配字符集: 元字符:[字符集]
      匹配规则: 匹配字符集中的任意一个字符表达形式: [aeiou数据管理] 表示[]中的任意一个字符 [0-9],[a-z][A-Z] 表示区间内的任意一个字符 [#?0-9a-z] 混合书写,一般区间表达定在后面
    1. 匹配字符集反集: 元字符:字符集
      匹配规则: 匹配除了字符集以外的任意一个字符2. 匹配重复元字符*:
      匹配规则: 匹配前面的字符出现0次或多次
      元字符+:
      匹配规则: 匹配前面的字符出现1次或多次
      元字符?:
      匹配规则: 匹配前面的字符出现0次或1次
      元字符{n}:
      匹配规则: 匹配前面的字符出现n次
      元字符{m,n}:
      匹配规则: 匹配前面的字符出现m-n次3. 匹配位置匹配字符串开始位置:
      元字符^:
      匹配规则: 匹配目标字符串的开头位置
      匹配字符串结束位置:
      **元字符:** 匹配规则: 匹配目标字符串的结束位置 规则技巧:^和必须出现在正则表达的开头和结尾处。如果两者同时出现,则蹭的部分必须匹配整个目标字符串的全部内容4. 其它匹配任意(非)数字字符
      元字符:\d 相当于[0-9] \D 相当于[^0-9]
      匹配规则:\d匹配任意数字字符,\D匹配任意非数字字符
      匹配任意(非)普通字符
      说明:普通字符指数字、字母、下划线、汉字
      元字符:\w \W
      匹配规则:\w 匹配普通字符,\W 匹配非普通字符
      匹配任意(非)空字符
      说明:空字符指 空格\r \n \t \v \f 字符
      元字符:\s \S
      匹配规则:\s 匹配空字符,\S 匹配非空字符
      匹配任意(非)单词的边界位置
      说明:单词边界指数字字母(汉字)下划线与其他字符的交界位置
      元字符:\b \B
      匹配规则:\b 表示单词边界,\B 表示非单词边界5. 元字符分类类别元字符匹配字符. [...] [^...] \d \D \w匹配重复* + ? {n} {m,n}匹配位置^ $ \b \B其它| () \6. 特殊字符匹配
    • 目的:如果匹配的目标字符串中包含正则表达式特殊字符,则在表达式中元字符就想表示其本身含义时就需要进行\处理。
      • 特殊字符 . * + ? ^ $ [] () {}
        操作方法:在正则表达式元字符前加\则元字符就是去其特殊含义,就表示字符本身7. 贪婪模式和非贪婪模式
    • 定义贪婪模式:默认情况下,匹配重复的元字符总是尽可能多的向后匹配内容。比如:* + ? {m,n}非贪婪模式(懒惰模式):让匹配重复的元字符尽可能少的向匹配内容。
    • 贪婪模式转换为非贪婪模式在对应的匹配重复的元字符后加"?"号即可
    • 一定是符合规则的前提下。一般在左右配合时使用。8. 分组
    • 定义在正则表达式中,以()建立正则表达的内部分组,子组是正则表达式的一部分,可以作为内部整体操作对象。
    • 作用: 可以被作为整体操作,改变元字符的操作对象
    • 捕获组 本质也是一个子组,只不过拥有一个名称用以表达该子组的意义,这种有名称的子组即为捕获组。格式:(?Ppattern)
    • 注意:
      • 一个正则表达式中可以包含多个子组
      • 子组可以嵌套但是不宜结构过于复杂
      • 子组序列号一般从外到内,从左到右计数
        正则表达式匹配原则
        1. 正确性,能够正确的匹配出目标字符串。
        2. 排他性,除了目标字符串之外尽可能少的匹配其它内容。
        3. 全面性,尽可能考虑到目标字符串的所有情况,不遗漏。

      Python re模块使用

      ——————————————————————————

      1. 基础函数

      以下为Python正则表达式常用函数:

      re.findall(pattern,string) 
      功能:根据正则表达式匹配目标字符串内容 
      参数:pattern 正则表达式 
           string 目标字符串 
      返回值: 匹配到的内容列表,如果正则表达式有子组则只能获得到子组对应的内容 
      
      re.split(pattern,string,max) 
      功能:使用正则表达式匹配内容,切割目标字符串 
      参数:pattern 正则表达式 
           string 目标字符串 
           max 最多切割几部分 
      返回值:切割后的内容列表 
      
      re.sub(pattern,replace,string,count) 
      功能:使用一个字符串替换正则表达匹配到的内容 
      参数: pattern 正则表达式 
            replace 替换的字符串 
            string 目标的字符串 
            count 最多替换几处,默认替换全部 
      返回值:替换后的字符串

      2. 生成match对象

      re.finditer(pattern,string)
      功能:根据正则表达式匹配目标字符串内容
      参数:pattern 正则表达式
           string 目标字符串
      返回值:匹配结果的迭代器
      re.match(pattern,string)
      功能:匹配某个目标字符串开始位置
      参数:pattern 正则
           string 目标字符串
      返回值:匹配内容match object
      re.search(pattern,string)
      功能:匹配目标字符串第一个符合内容
      参数:pattern 正则
           string 目标字符串
      返回值:匹配内容match object
      

      3. match对象使用

      span() 
         功能:获取匹配内容的起止位置
      group(n = 0)
         功能:获取match对象匹配内容参数:默认为0表示获取整个match对象内容,如果是序列号或者组名则表示获取对应子组内容返回值:匹配字符串
版权声明:seasilo 发表于 2020-12-30 19:49:46。
转载请注明:Python正则表达式学习笔记 | 海筒自习室

暂无评论

暂无评论...