先整理下正则表达式的规则,以下内容大部分来自廖雪峰的python教程。
\d表示一个数字,\w表示一个数字或者一个字母,.表示任意一个字符,*表示任意个字符(包括0个),+表示至少一个字符,?表示0个或者1个字符,{n}表示n个字符,{n,m}表示n至m个字符。
[0-9a-zA-Z\_]匹配一个数字或者一个字母或者下划线,[0-9a-zA-Z\_]+匹配至少一个由一个数字或者一个字母或者下划线组成的字符串,[0-9a-zA-Z\_]{n, }匹配至少n个及以上数量符合要求的字符,[a-zA-Z\_][0-9a-zA-Z\_]*匹配开头字符为一个字母或者下划线,后边跟任意一个数字或者一个字母或者下划线的字符串,也就是python的合法变量名,[a-zA-Z\_][0-9a-zA-Z\_]{0,19}匹配开头字符为一个字母或者下划线,后边最多跟19个字符。
A|B可以匹配A或B, ^表示行的开头,^\d表示必须以数字开头,$表示行的结束,\d$表示必须以数字结束。
正则表达式前缀加r后让python编译器不再转义,当做raw string处理,遇到\n会当做两个字符处理,而不是换行。
一般用法是import re后,使用re.match()方法。
import re使用re的split方法识别多种分隔符。
if re.match(r'^\d{3}\-\d{3,8}$', '010-123456'):
print('right')
else:
print('wrong')
re的括号定义group的分组。
匹配一个合法时间19:28:59,可以使用re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:([0-5][0-9]|[0-9])\:([0-5][0-9]|[0-9])$', '19:28:59')。
课后习题判断一个字符串是否为合法的邮箱地址。
re.match(r'^[0-9a-zA-Z\_\-]+(\.[0-9a-zA-Z\_\-]+)*@[0-9a-zA-Z]+(\.[0-9a-zA-Z]+){1,}$', 'mashijia985.bj@163.com')