re
常用的re语法
re.match 从头开始匹配 ,用$最好不用match
re.search 匹配包含,匹配到一个就结束 判断有没有返回结果,有结果可以通过group()返回结果,否则就会报错
- group() 返回search,match结果
- groups(),分组匹配时分开结果
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.split 以匹配到的字符当做列表分隔符
re.sub 匹配字符并替换
re.fullmatch 全部匹配
表示字符
. 匹配任意1个字符(除了\n)
[ ] 匹配[ ]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即 空格,tab键\t、\n、\r
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
表示数量
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,} 匹配前一个字符至少出现m次
{m,n} 匹配前一个字符出现从m到n次
表示边界
^ 匹配字符串开头
$ 匹配字符串结尾
\A 只从字符开头匹配
\Z 匹配字符结尾
\b 匹配一个单词的边界 配合r""使用
\B 匹配非单词边界
匹配分组
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串
贪婪匹配
Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符
在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。
标志符
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
re.M(MULTILINE): 多行模式,,改变'^'和'$'的行为 遇到换行符,就认为是结尾
re.S(DOTALL): 改变'.'的行为,本来不匹配换行符,加入此标志符,连换行符也要匹配
re.X(re.VERBOSE) 可以给你的表达式写注释,使其更可读,下面这2个意思一样