木子随记 - RegEx
type: channel
link: https://www.liccoo.com/tag/RegEx/
items: python 正则表达式课程笔记记录

python 正则表达式课程笔记记录
type: item
date: 2022-01-19T12:44:00+08:00
description: 1 概述1.1 正则表达式简介概念：又称规则表达式，在代码中常简写为 regex、regexp、RE,作用验证数据的有效性（查找）替换文本内容从字符串中提取字符串（爬虫思想）1.2 正则表达式的构成原子（普通字符，如英文字符）元字符（有特殊功用的字符）模式的修正字符一个正则表达式中至少包含一个原子。2 测试工具能够使用 regexbuddy 进行正则验证 --- 因为正则表达式难于读写，容易出错。使用选择 Python3.6test 选项卡3 匹配字符3.1 单个字符. 匹配任意单个字符 (除\n)[] 列举，匹配 [] 中列举的内容[ab] 匹配 a 或者 b[a-z] 匹配所有的小写字母[A-Z] 匹配大写字母[0-9] 匹配数字[a-zA-Z] 匹配所有的小写字母和大写字母\d 匹配所有的数字 等价于 [0-9]\D 非数字\s 空白\S 非空白\w 匹配 字母、数字、下划线 等同于 [a-zA-Z0-9_]\W 非数字、非字母、非下划线*. 代表转义字符 *3.2 多个字符* 表示前一个字符出现 0 次或者 无限次+ 表示 前一个字符出现 1 次或者 无限次? 表示 前一个字符出现 0 次或者 1 次 （要不不出现，要不只能出现一次）{m} 表示前一个字符，连续出现 m 次{m,n} 表示前一个字符，连续出现最少 m 次，最多 n 次m 一定要小于 n3.3 匹配开头结尾^ 的两个作用表示以指定字符（后一个）开头用在[]内部，用于取反$ 表示以前一个字符结尾4 re模块re模块的作用： python 提供的用于正则操作的模块re模块的使用步骤：导入模块使用 match() 方法进行检测判断是否检测/匹配成功取出匹配的具体内容4.1 re.match函数re.match 尝试从字符串的起始位置匹配一个模式，如果不是起始位置匹配成功的话，match()就返回 none。函数语法：re.match(pattern, string, flags=0)函数参数说明：pattern: 匹配的正则表达式string: 要匹配的字符串。flags: 标志位，用于控制正则表达式的匹配方式，如：是否区分大小写，多行匹配等等。参见：正则表达式修饰符 - 可选标志match() 方法一旦匹配成功，就是一个 match object 对象，这个对象有以下几种方法：group()：返回被 RE 匹配的字符串start()：返回匹配的开始位置end()：返回匹配结束的位置span()：返回一个元组包含匹配(开始，结束)的位置4.2 分组匹配表达式1|表达式2：匹配左右任意一个表达式注意：| 的作用：或者关系，多个正则表达式满足任意一个都可以，即可以多个连用。表达式1|表达式2|表达式3|表达式4|表达式5|...(ab)：将括号中的字符作为一个分组，即把括号里看为一个整体。对于 python 的 re.match，若 result = re.match('^\w{4,20}@(126|qq|163)\.com$', 'liccoo@163.com')，可以使用 result.group(1) 查看具体匹配的哪一个，是126 或 qq 或 163。其中result.group(num)中的 num 代表正则表达式中的第几个括号\num：引用分组 num 匹配到的字符串为了防止转义字符的作用，在实际中可以将字符串前面加上 r，result = re.match(r'^<(html)>.*</\1>$', ' sfsaefafoshfioaghjhrhvifhgi ')(?P<name>)：分组起别名(?P<name>)：分组起别名语法(?P=name)：引用别名为 name 分组匹配到的字符串作用就是给分组起别名使其更加有意义，以便记忆和引用。例如：result = re.match(r'^<(?P<name1>[a-z0-9]+)><(?P<name2>[a-z0-9]+)>.*</(?P=name2)></(?P=name1)>$', ' sfsaefhvifhgi ')4.3 re.search方法re.search 扫描整个字符串并返回第一个成功的匹配。匹配成功 re.search 方法返回一个匹配的对象，否则返回 None。函数语法：re.search(pattern, string, flag=0)函数参数说明：pattern：匹配的正则表达式string：要匹配的字符串flags：标志位，用于控制正则表达式的匹配方式，如：是否区分大小写，多行匹配等等。参见：正则表达式修饰符 - 可选标志search() 方法一旦匹配成功，就是一个 search object 对象，这个对象有以下几种方法：group()：返回被 RE 匹配的字符串star…