Python基础(正则表达式)

import re
test = r'^\d{3}\-\d{3,8}$'
num = '010-12345'
print(re.match(test,num))#<re.Match object; span=(0, 9), match='010-12345'> match()方法判断是否匹配,若是匹配成功,返回一个Match对象,不然返回None

str1 = 'a b c'
print(re.split('\s+',str1))#['a', 'b', 'c'] 正则表达式切分字符串

test1 = r'^(\d{3})-(\d{3,8})$'#用()表示的就是要提取的分组(Group),^(\d{3})-(\d{3,8})$分别定义了两个组
str2 = re.match(test1,num)
print(str2.groups())#('010', '12345')
print(str2.group(0))#010-12345  group(0)永远是原始字符串,group(1)、group(2)……表示第一、二、……个子串
print(str2.group(1))#010
print(str2.group(2))#12345

print(re.match(r'^(\d+)(0*)$', '102300').groups())#('102300', '')   因为\d+采用贪婪匹配,直接把后面的0所有匹配了,结果0*只能匹配空字符串了
print(re.match(r'^(\d+?)(0*)$', '102300').groups())#('1023', '00')  必须让\d+采用非贪婪匹配(也就是尽量少匹配),才能把后面的0匹配出来,加个?就能够让\d+采用非贪婪匹配

#若是一个正则表达式要重复使用几千次,出于效率的考虑,咱们能够预编译该正则表达式,接下来重复使用时就不须要编译这个步骤了,直接匹配
re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
print(re_telephone.match('010-12345').groups())#('010', '12345')    编译后生成Regular Expression对象,因为该对象本身包含了正则表达式,因此调用对应的方法时不用给出正则字符串