正则表达式
简单的范围的字符组
0-9 匹配所有的数字
a-z 匹配所有的小写字母
A-Z 匹配所有的大写字母
A-Za-z 匹配所有的字母
字符
. 匹配换行符之外的任意字符
\w word 匹配数字,字母,下划线
\s space 匹配所有的空格符
\d digit 匹配数字
\W word 匹配非数字,字母,下划线
\S space 匹配所有的非空格符
\D digit 匹配非数字
\n 匹配换行符
\t tab 匹配制表符
^ startwith 匹配字符串的开始,位置永远在最前
$ endswith 匹配字符串的结尾,位置永远在最后
^ $ 两个一起用可以约束中间的所有字符,但是要求全部完全匹配
| 或 从左向右,匹配上了就不匹配了,因此长的放在前面
ab|abc 先匹配ab,后面有abc也不会被选中
量词:量词放在后面只约束前面一个的要求
* 重复零次或更多次
+ 重复一次或更多次,重复一次得到的结果就是单字符。
? 重复零次或一次
? 如果放在量词后面表示非贪婪匹配,匹配最少(惰性匹配)
默认是贪婪匹配,匹配到最多
表示惰性匹配的时候会缓存后面一位表示结尾的指令。比如.*?x 表示取到x前面一个字符
放在分组前面,取消分组优先
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
字符集
[] 匹配字符组中的字符
[^] 匹配除了字符组中字符的所有字符
分组
() 对整体的式子进行量词约束
在split的时候分组会保留被分割的字符
在findall的时候,会优先匹配分组内的内容
若不想优先,可以使用(?:)取消分组优先级
转义字符
\ python 里面的转义字符用 r''
flags
re.I(IGNORECASE)忽略大小写,括号内是完整的写法
re.M(MULTILINE)多行模式,改变^和$的行为
re.S(DOTALL)点可以匹配任意字符,包括换行符
re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用
re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag
re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释