正则表达式
正则表达式(Regular Expression)是一种文本模式,使用普通字符和特殊字符定义一个特殊的字符串来描述和匹配符合某个语法规则的字符串。正则表达式入门稍微难点,但是学会之后真的会提高效率,而且有满满的装逼感。
常用语法
下表的字符用来描述字符串或者单词的边界
字符 | 描述 |
---|---|
^ | 匹配输入字行首 |
$ | 匹配输入行尾 |
\b | 匹配一个单词边界,即字与空格间的位置 |
\B | 非单词边界匹配 |
() | 标记一个子表达式的开始和结束位置 |
使用方括号来指定多个字符区间
字符 | 描述 |
---|---|
[a-z] | 匹配小写英文字母a-z |
[^a-z] | 匹配任何不在a-z内的任意字符 |
[A-Z] | 匹配大写英文A-Z |
[0-9] | 匹配数字0-9 |
[xyz] | 匹配所包含的任意一个字符 |
[^xyz] | 匹配非xyz的任意字符 |
$x | y$ |
下表里面的字符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配
字符 | 描述 |
---|---|
. | 匹配除换行符 \n 之外的任何单字符 |
* | 匹配前面的子表达式零次或多次 |
+ | 匹配前面的子表达式一次或多次 |
? | 匹配前面的子表达式一次或零次 |
{n} | n 是一个非负整数,匹配确定的n次 |
n,} | n 是一个非负整数,匹配至少n次 |
{n,m} | m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次 |
下表列出转义字符,也是正则表达式中的组成部分
字符 | 描述 |
---|---|
\d | 匹配一个数字字符 |
\D | 匹配一个非数字字符 |
\s | 匹配任何空白字符 |
\S | 匹配任何非空白字符 |
\w | 匹配字母、数字、下划线 |
\W | 匹配非字母、数字、下划线 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
但用圆括号会有一个副作用,使相关的匹配会被缓存,此时可用非捕获元(?:, ?=, ?!)放在第一个选项前来消除这种副作用
字符 | 描述 |
---|---|
exp1(?=exp2) | 查找exp2前面的exp1 |
(?<=exp2)exp1 | 查找exp2后面的exp1 |
exp1(?!exp2) | 查找后面不是exp2的exp1 |
(?<!=exp2)exp1 | 查找前面不是exp2的exp1 |
常用正则表达式
字符 | 描述 |
---|---|
汉字(字符) | [\u4e00-\u9fa5] |
匹配由26个英文字母组成的字符串 | 1+$ |
网址(URL) | [a-zA-z]+://[^\s]* |
时间(小时:分钟, 24小时制) | $((1 |
日期格式(yyyy-mm-dd) | ^\d{4}-\d{1,2}-\d{1,2} |
至少8个字符,至少1个大写字母,1个小写字母和1个数字,不能包含特殊字符(非数字字母) | ^(?=.[A-Za-z])(?=.\d)[A-Za-z\d]{8,}$ |
python re库
python中的库文件re中定义了正则表达式常用函数。
-
re.compile(pattern[, flags])函数用于编译正则表达式,生成一个正则表达式对象,供 match() 和 search() 这两个函数使用
-
re.match(pattern, string, flags=0)从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,则返回None
-
re.search(pattern, string, flags=0)扫描整个字符串并返回第一个成功的子串
re.match和re.search的区别在于:re.match从字符串的起始开始匹配,发现字符不符合正则表达式时,匹配失败,返回None;而re.search则匹配整个字符串,直到字符串的末尾
-
re.sub(pattern, rep1, string, count=0, flags=0)用于替换字符串中的匹配项
-
re.finditer(pattern, string, flags=0)在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回
-
re.split(pattern, string[, maxsplit=0, flags=0])按照能够匹配的子串将字符串分割后返回列表
A-Za-z ↩︎