Python re模块
re模块:通过正则表达式匹配字符串
1.字符组
字符组用[]表示; 枚举法:匹配数字 [0123456789]; [0-9]与[0123456789]相同,‘-’表示范围;
[A-Z],[a-z]分别表示A到Z的大写字母和a到z的小写字母 [0-9A-Za-z]
2.字符
元字符 |
匹配内容 |
| . | 匹配除换行符以外的任意字符 |
| \w | 匹配字母或数字或下划线 |
| \s | 匹配任意的空白符 |
| \d | 匹配数字 |
| \n | 匹配一个换行符 |
| \t | 匹配一个制表符 |
| \b | 匹配一个单词的结尾 |
| ^ | 匹配字符串的开始 |
| $ | 匹配字符串的结尾 |
| \W |
匹配非字母或数字或下划线 |
| \D |
匹配非数字 |
| \S |
匹配非空白符 |
| a|b |
匹配字符a或字符b |
| () |
匹配括号内的表达式,也表示一个组 |
| [...] |
匹配字符组中的字符 |
| [^...] |
匹配除了字符组中字符的所有字符 |
3.量词
量词 |
用法说明 |
| * | 重复零次或更多次 |
| + | 重复一次或更多次 |
| ? | 重复零次或一次 |
| {n} | 重复n次 |
| {n,} | 重复n次或更多次 |
| {n,m} | 重复n到m次 |
4.用法
''' \d ->[0-9] :表示包含一个数字,\d+:表示最少包含一个数字,\d*:表示包含0到多个数字,\d?:表示包含0个或一个数字 \w ->[0-9A-Za-z]:表示包含一个数字或者字母,同理上述 \s 一位空白字符 + 最少一个 * 零到多个 ? 零或一个 [...] 表示一组字符,单独列出 (?:re) 类似(...) (?=re) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。\ 但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。 *? 重复任意次,但尽可能少重复 +? 重复1次或更多次,但尽可能少重复 ?? 重复0次或1次,但尽可能少重复 {n,m}? 重复n到m次,但尽可能少重复 {n,}? 重复n次以上,但尽可能少重复 . 是任意字符 * 是取 0 至 无限长度 ? 是非贪婪模式。 合在一起就是 取尽量少的任意字符,一般不会这么单独写,大多用在: .*?x 就是取前面任意长度的字符,直到一个x出现 '''
# 密码必须包含字母,数字,特殊字符
print(re.match('^(?:(?=.*[A-Za-z])(?=.*[0-9])(?=.*[~!@#$%^&*()_+\-=<>.,/])).*$','hhw-3freSrwe'))
# 匹配手机号
print(re.match('^1[356789][0-9]{9}','15555555555'))
# 匹配邮箱
print(re.match('^[0-9a-zA-Z_]{1,19}@[0-9a-zA-Z]{1,13}\.[a-z]{2,}$','w@qq.cn'))
浙公网安备 33010602011771号