投稿  收藏 
找出所有的班级名称

【问题描述】

给定一段文字“2020级电商1班和2021级计算机3班志愿服务队是我校志愿服务总队领导下的志愿团体”,找出其中的班级名称,并输出结果。

找出所有的班级名称输出结果:

结果1:<re.Match object;span=(0,9),match='2020级电商1班'>

结果2-1:<re.Match object;span=(0,9),match='2020级电商1班'>

结果2-2:2020级电商1班

结果3:['2020级电商1班','2021级计算机3班']

【题前思考】

根据问题描述,填写表10-1-1。

表10-1-1 问题分析

找出所有的班级名称

【解题思路】

首先,班级名称由年级、专业和班号构成,具体的格式为××××级+专业+×班,×为一个数字,“专业”可能为若干个任意字符,“级”和“班”是固定的字符;其次,写出正确的正则表达式描述这种格式;最后,编写代码验证功能。

【程序代码】

找出所有的班级名称

找出所有的班级名称

【代码分析】

①:导入正则表达式模块re。

②:变量s为待分析的字符串,其中班级名称的格式为××××级+专业+×班,×为一个数字。

③:pattern1字符串是一个正则表达式,又称为样式,用来描述班级名称。其中,“\d、\S、级、班”称为元字符,分别表示匹配数字、任何非空白字符和汉字“级”“班”。“+”是量词,“\S+”指前面的非空白字符出现1到多次。“?”表示非贪婪模式。匹配过程如图10-1-1所示。

④:调用re.match( )方法匹配样式,匹配成功,rs是match类的对象,如果没有匹配,rs为none。

⑤:打印rs,可以看到结果为match类的对象,称为匹配对象。

⑥:pattern1中“\d\d\d\d”连续匹配4个数字,可以用pattern2中“\d{4}”简写。“{4}”是量词,表示其前面的“\d”刚好出现4次。匹配过程如图10-1-2所示。

找出所有的班级名称

图10-1-1 pattern1的匹配样式

找出所有的班级名称

图10-1-2 pattern2的匹配样式

⑦:使用正则表达式pattern2匹配,结果保存到rs1中。

⑧:打印rs1,可以看到结果为匹配对象。

⑨:调用匹配对象的group( )方法,输出匹配到的字符串。注意只输出了一个班级名称。

⑩:re.match( )方法从第一个字符开始匹配且只匹配一次。为了找到所有的班级名称,可以调用re.findall( )方法,该方法返回一个列表。匹配过程如图10-1-3所示。

找出所有的班级名称:输出rs2,可以看到匹配结果是一个列表。

找出所有的班级名称

图10-1-3 使用findall( )方法匹配多个字符串

【优化提升】

在上例中,每次执行正则表达式都需要解释器重新编译。如果一个正则表达式被多次调用,可以使用re.compile( )方法将其编译为一个正则表达式对象(Pattern对象),通过调用这个对象的match( )、search( )、findall( )等方法,可以提高程序的运行效率。

采用下面两条语句,同样可以找到s中的所有班级名称。

pattern2=re.compile('\d{4}级\S+?\d班')

rs2=pattern2.findall(s)

【技术全貌】

量词的形式为{n,m},其中n和m分别表示使用该量词的表达式必须匹配的最少次数和最多次数。贪婪量词总是尽量匹配更多的字符,先看整个字符串是不是一个匹配。如果没有发现匹配,它去掉字符串中的最后一个字符,并再次尝试。非贪婪量词正好相反,先看字符串中的第一个字母是不是一个匹配;如果单独这一个字符还不够,就读入下一个字符,组成两个字符的字符串;如果还是没有发现匹配,继续添加字符直到发现一个匹配或者整个字符串都检查过也没有匹配。表10-1-2列举了常见的量词形式。表10-1-3列出了需要记忆的常用特殊符号,称为元字符。表10-1-4列出了re模块的常用函数。表10-1-5列出了匹配对象(match)的属性和方法。表10-1-6列出了模式对象(pattern)的属性和方法。

表10-1-2 量词的形式

找出所有的班级名称

表10-1-3 常见元字符

找出所有的班级名称

注:如果需要匹配符号".",可以使用转义字符"\."。

表10-1-4 re模块的常用函数

找出所有的班级名称

续表

找出所有的班级名称

表10-1-5 匹配对象(match)的属性和方法

找出所有的班级名称

表10-1-6 模式对象(pattern)的属性和方法

找出所有的班级名称

注:re模块中的方法对于pattern都适用,只是少了pattern参数。

 

关 键 词

班级名称

相关教程

提示声明

  • 免责声明:本站资源均来自网络或者用户投稿,仅供用于学习和交流:如有侵权联系删除!

猜你喜欢