一、通用正则
1、确定内容
\d 单个数字 \D 单个非数字
. (点) 除\n以外的所有,即通配符
2、确定个数
[ ] : 中括号表示只能取一个 ,大括号里面写可选的内容
{m} : 大括号表示位数,此处 表示必须 m 位
{n, m} : 大括号表示位数, 此处 表示 n-m位,类比于 MySQL的limit(n,m).和{m}对比记忆
?:可1可无
+:可1可更多
*:可有可无
3、开头 和 结尾
^ 开头
$ 结尾
4、其他
| 或者,列举几个选项, 如 163|qq|gmail
() 限定范围,可用于分组
\ 转义,用于匹配字符串中带 . ? | 这些特殊字符的,看情况也可用[]
注意:确定内容和确定个数,搭配使用。
例1、判断变量是否符合命名规则: 由字母数字下划线构成,不能由数字开头。对: a_name ; 错:1_name name*
import re
name_list = ['1_name', 'a_name', '_name', '#name', 'name)', 'age']
for temp in name_list:
ret = re.match(r'^[a-zA-Z_][a-zA-Z0-9_]*$', temp)
try:
print("变量名 %s 符合规则" % ret.group())
except:
print("变量名 %s 不符合规则" % temp)
例2、判断邮箱
要求:判断163或者qq邮箱地址,在@符号之前必须是4-20位的英文数字下划线,hello@163.com
import re
def main():
emails = ['hello@163.com', 'h@163.com', '#@163.com', 'hello@163.com2', 'hello@165.com', 'hello@163acom', 'hello@qq.com']
for e in emails:
# ret = re.match(r'^[a-zA-Z0-9_]{4,20}@163[.]com$', e)
ret = re.match(r'^[a-zA-Z0-9_]{4,20}@(163|qq)\.com$', e)
if ret:
print('符合规范 %s' % e)
else:
print('不符合规范 %s' % e)
if __name__ == '__main__':
main()
二、python里的正则高级用法
这一部分是在python中可调用的几个特殊方法
1、导入re模块 import re
2、match: re模块中的匹配方法,自带^,即从头匹配
3、search:从待匹配的字符串中搜索,不用从头开始,搜到即停
4、findall: 从待匹配的字符串中搜索,不用从头开始,可搜多个,返回列表
5、sub: 三个参数,re.sub(r"正则", 最终想要替换的内容, 原字符串),即3,4只能搜出来,sub还能替换成新的样子,再返回回来。第二个参数也可以写一个函数名称
6、split:切割,举例一下就懂:
import re
ret = re.split(r'a', 'helloaworldaHH')
print(ret) # 结果: ['hello', 'world', 'HH']
此处用'a'切割,也可以用其他任何字符切割,如空格,逗号等
总结: 正则就是挨着每一位或者每一块的限定规则,规则很简单,合理的搭配使用,可匹配万物。