主要内容 #
综合实战:能使用简单的正则表达式进行文本数据的清洗,本节课主要介绍不使用正则表达式进行文本筛选的过程-即首先建立模式函数,然后传入字符串进行模式匹配,最终返回或打印匹配到的字符串,事实上整个过程与正则表达式的使用是一致的。1.电话号码的查询 #
假如我们希望在一段字符串中查找电话号码。模式是:3个数字,一个短横线,再是8个数字。例如:021-34206188。我们可以定义一个名为isphonenum()的函数进行判断,如果是电话号码就返回True,否则的话就返回False,然后对我们所需要查找的信息进行扫描,筛选出匹配模式的文本def isphonenum(text=''):#定义函数关键字参数text=''默认为空 if len(text)!=12:#首先判断长度 return False#不符合长度标准返回False函数结束 if not text[0:3].isdecimal():#isdecimal()判断字符串是否只是包含数字,注意字符串切片的使用左闭右开 return False if text[3]!='-':#依次按照条件判断 return False for i in range(4,12):#依次按照条件判断 if not text[i].isdecimal(): return False return True#程序执行完全部检查,合格后返回True print('021-34206188 is a phonenumber:',isphonenum('021-34206188')) print('021-10086 is a phonenumber:',isphonenum('021-10086'))
2.电话号码的筛选 #
如果我们想在一段文本中筛选出这种格式电话号码,需要对我们的信息进行扫描,程序如下:def isphonenum(text=''):#定义函数关键字参数text=''默认为空 if len(text)!=12:#首先判断长度 return False#不符合长度标准返回False函数结束 if not text[0:3].isdecimal():#isdecimal()判断字符串是否只是包含数字,注意字符串切片的使用 return False if text[3]!='-':#依次按照条件判断 return False for i in range(4,12):#依次按照条件判断 if not text[i].isdecimal(): return False return True message='在下午5点钟打电话给我,我的座机:021-12345678,公司座机:021-10067341.' print('查找到的电话号码:') for i in range(len(message)): check=message[i:i+12]#注意字符串的切片使用左闭右开 if isphonenum(check):#判断是否是电话号码 print(check)
习题 #
事实上,区号后的电话号码长度并不一定是8个数字一般是5-8位数字。请定义相应的函数进行匹配,并进行验证OJ训练题 #
1、多边形内角和 – ★
2、既生瑜,何生亮 – ★★
3、求s = a+aa+aa….a – ★
4、孪生素数 – ★★
5、第N个智慧数 – ★★★★