常用正则通配符和表达式\d一个数字\w一个字母或数字。除换行符外的任何单个字符\n*0个或多个字符+一个或多个字符?0或一个字符{n}n个字符{n,m}n-m个字符\s一个空白字符(包括制表符、换行符等)\-匹配字符(转义)[0-9a-zA-Z\_]一个数字,字母或下划线[0-9a-zA-Z\_]+至少一个数字,字母或下划线[a-zA-Z\_][0-9a-zA-Z\_]*Python合法变量(A丨B)A或B^行首$行尾re模块正则匹配importreifre.match(r'^\d{3}\-\d{3,8}$','010-12345'):print('ok')else:print('failed')splitstring>>>re.split(r'\s+','abc')['a','b','c']>>>re.split(r'[\s\,\;]+','a,b;;cd')['a','b','c','d']分组^(\d{3})-(\d{3,8})$分别定义了两组,可以直接从匹配的字符串中提取区号和本地号码:>>>m=re.match(r'^(\d{3})-(\d{3,8})$','010-12345')>>>m<_sre.SRE_Match对象;span=(0,9),match='010-12345'>>>>m.group(0)'010-12345'>>>m.group(1)'010'>>>m.group(2)'12345'贪心匹配正则匹配默认是贪心匹配,即匹配尽可能多的字符。如下,匹配数字后面的0:>>>re.match(r'^(\d+)(0*)$','102300').groups()('102300','')因为\d+使用贪心匹配直接匹配后面所有的0,结果是0*只能匹配空串。需要让\d+使用非贪婪匹配(即尽量少匹配),才能匹配后面的0,再加一个?使\d+使用非贪婪匹配:>>>re.match(r'^(\d+?)(0*)$','102300').groups()('1023','00')Precompiled正则表达式在Python中使用正则表达式时,re模块会在里面做两件事:编译正则表达式。如果正则表达式的字符串本身不合法,就会报错;使用编译后的正则表达式来匹配字符串。如果一个正则表达式要多次复用,为了效率,可以对正则表达式进行预编译,复用时不编译直接匹配:>>>importre#compile:>>>re_telephone=re.compile(r'^(\d{3})-(\d{3,8})$')#使用:>>>re_telephone.match('010-12345').groups()('010','12345')>>>re_telephone.match('010-8086').groups()('010','8086')
