RE
RE,Regular Expression,正则表达式
正则表达式是一个描述句法规则的字符串,用以匹配一系列满足该句法规则的字符串,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
正则表达式工具
https://c.runoob.com/front-end/854/
字符
正则表达式中使用的字符包含保留字符和普通字符。
保留字符
保留字符包括$、(、)、*、+、.、[、]、?、\、^、{、}、|,用于构建正则表达式语法规则,并不直接用于字符串匹配。若需要匹配字符串中的$,需要使用保留字符\转义保留字符$,即正则表达式中\$形式用来匹配字符串中的$。
普通字符
普通字符包括没有显式指定为保留字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
语法
定位
^:匹配字符串开始位置$:匹配字符串结尾位置\b:匹配单词边界\B:匹配非单词边界
选择
|,二选一[...],n选一[^...],反选
分组
():()中内容作为独立分组
定量
*,匹配前面的子表达式零次或多次
+,匹配前面的子表达式一次或多次
?,匹配前面的子表达式零次或一次
{n},n 是一个非负整数。匹配确定的 n 次
{n,},n 是一个非负整数。至少匹配n 次
{n,m},m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次
*和+符号为贪婪匹配,使用?可将其转化为非贪婪匹配
定性
\w:匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
\s:是匹配所有空白符,包括换行,\S 非空白符,不包括换行。
.:匹配除换行符 \n 之外的任何单字符
\d:匹配数字,等于[0-9] re.findall(‘\d’,’电话:10086’)结果[‘1’, ‘0’, ‘0’, ‘8’, ‘6’]\D:匹配非数字,等于[^0-9] re.findall(‘\D’,’电话:10086’)结果[‘电’, ‘话’, ‘:’]\w:匹配字母和数字,等于[A-Za-z0-9] re.findall(‘\w’,’alex123,./;;;’)结果[‘a’, ‘l’, ‘e’, ‘x’, ‘1’, ‘2’, ‘3’]\W:匹配非英文字母和数字,等于[^A-Za-z0-9] re.findall(‘\W’,’alex123,./;;;’)结果[‘,’, ‘.’, ‘/‘, ‘;’, ‘;’, ‘;’]\s:匹配空白字符 re.findall(‘\s’,’3*ds \t\n’)结果[‘ ‘, ‘\t’, ‘\n’]\S:匹配非空白字符 re.findall(‘\s’,’3ds \t\n’)结果[‘3’, ‘’, ‘d’, ‘s’]
修饰
i:ignore,不区分大小写,将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别g:global,全局匹配,查找所有的匹配项m:multi,多行匹配,会将多行字符串按照\n分为多段分别进行边界字符^和$匹配,而不是将整个多行字符串进行匹配s:.默认匹配除\n之外的任意字符,s修饰后.会匹配\n,即匹配任意字符
?=、?<=、?!、?<!
解析器
re.match(pattern, string, flags=0) 从字符串的起始位置匹配,如果起始位置匹配不成功的话,match()就返回none
re.search(pattern, string, flags=0) 扫描整个字符串并返回第一个成功的匹配
re.findall(pattern, string, flags=0) 找到RE匹配的所有字符串,并把他们作为一个列表返回
re.finditer(pattern, string, flags=0) 找到RE匹配的所有字符串,并把他们作为一个迭代器返回
re.sub(pattern, repl, string, count=0, flags=0) 替换匹配到的字符串