用正则表达式处理缩写班级字符串

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:itshuai
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:如何把缩写的班级字符串分拆成单独的班级是一件麻烦事。用正则表达式能很好地解决这个问题。
  关键词:正则表达式;golang
  中图分类号:TP391.1 文献标识码:A
  文章编号:1009-3044(2019)35-0223-01
  在处理学校班级相关事情时,经常会碰到“2015级应用数学一、三班、统计数学班、2016级专升本班”这种缩写表述方式。首先是省略年级,如例子中的“统计数学班”,那么年级就会是刚刚出现的年级,即“2015级”。其次专业可能会分班,如“2015级应用数学一、三班”,实际上是“2015级应用数学一班、2015級应用数学三班”的缩写。那么现在的问题就是如何将这种表述分拆成一个一个独立的班级,如把上面的例子拆成“2015级应用数学一班、2015级应用数学三班、2015级统计数学班、2016级专升本班”。
  首先可以直接用字符串解析的方法来解决这个问题,但其思路烦琐,还容易出错。而用正则表达式就没有这些问题。
  几乎所有的现代编程语言都支持正则表达式,由于我在处理学校班级相关事情时用的是golang,所以以下论述均以gol-ang为背景。
  1 正则表达式的构建
  对于我们这个问题,正则表达式应该是:
  ^(20..级)([^、]*)((中文数字)(、(中文数字))*)?班((、(20..级)?[^、]*((中文数字)(、(中文数字))*)?班)*)$
  其中中文数字=一|二|三|四|五|六|七|八|九|十。
  由于第一个班级必须有年级,后面的则可以省略,所以第一个(20..级)后没有问号,第二个(20..级)后面则有一个问号。[^、]*是专业名称,((中文数字)(、(中文数字))*)是班级序号,由于专业不一定会分班,所以班级序号后有一个问号。
  2 年级、专业和班级序号的提取
  对“(、(20..级)?[^、]*((中文数字)(、(中文数字))*)?班)*”而言,golang只能提取出最后一个匹配项,这是无法满足问题需求的。为了解决这个问题,我们需要先提取“((、(20..级)?[^、]*((中文数字)、((中文数字))*)?班)*)”,即所有匹配项的集合,再对所有匹配项的集合继续应用正则表达式“^、(20..级)?([^、]*)((%s)(、(%s))*)?班((、(20..级)?[^、]*((%s)(、(%s))*)?班)*)$”,提取出第一项,然后再用这个正则表达式提取出第二项,……,直到剩下的字符串为空字符串。
  对于“((中文数字)(、(中文数字))*)”,就不用这么麻烦了,因为其只涉及班级序号,所以用strings.Split函数就行了。
  3 代码
  函数ParseClasses的参数是缩写班级字符串,返回值是一个切片,切片的每个元素都是一个完整的班级字符串。
  func ParseClasses(str string)[]string{
  var reg1, reg2 *regexp.Regexp
  tmp:="一|二|三|四|五|六|七|八|九|十"
  s1:="(20..级)([^、]*)((%s)(、(%s))*)?班((、(20..级)?[^、]*((%s)(、(%s))*)?班)*)$、
  ss1:= fmt.Sprintf(sl, tmp, tmp, tmp, tmp)
  s2:=`^、(20..级)?([^、]*)((%s)(、(%s))*)?班((、(20..级)?[^、]*((%s)(、(%s))*)?班)*)$、
  ss2:=fmt.Sprintf(s2, tmp, tmp, tmp, tmp)
  reg1=regexp.MustCompile(ss1)
  reg2=regexp.MustCompile(ss2)
  var classes []string
  result:=reg1.FindStringSubmatch(str)
  remainder:=result[7]
  nowji:=result[1]
  nums:=strings.Split(result[3],"、")
  for_,e:=range nums{
  classes=append(classes,nowji result[2] e "班")
  }
  for remainder!=}"{
  r:=reg2.FindStringSubmatch(remainder)
  if r[1]!=""{
  nowji=r[1]
  }
  remainder=r[7]
  nums=strings.Split(r[3],"、")
  for_,e:=range nums{
  classes=append(classes, nowji r[2] e "班")
  }
  }
  return classes
  }
  4 结束语
  正则表达式技术可以优雅的解析缩写班级字符串。我这里给出的方案暂时无法处理班级序号大于十的情况,不过把方案略作修改即可达到目的。由于几乎碰不到序号大于十的班级,所以为了程序简洁,我这里只给出班级序号不大于十的解决方案。
  参考文献:
  [1]Ben Forta.正则表达式必知必会[M].北京:人民邮电出版社,2007.
  [2]Matt Butcher. Go语言实战[M].北京:机械工业出版社,2019.
  【通联编辑:谢媛媛】
  收稿日期:2019-10-19
  作者简介:刘华煜(1976-),男,洛阳师范学院教师,主要研究方向为计算机软件开发及应用;蒋维(1981-),女,洛阳师范学院教师,千要研究方向为计算机应用与技术。
其他文献
社会在发展,人们对于家庭生活现代化及智能化的要求也在不断提高,而随着相关技术的发展完善,物联网技术也早已在潜移默化间成了民众日常生活的重要组成部分。借助于各种信息传感器,物联网技术将日常生活中原本单一的物件组合成了一个整体,进而构建起了一个相互关联的网络,该文从物联网技术及智能家居的概念出发,对该技术在智能家居发展中的运用进行了分析探究。
摘要:随着我国网络建设的逐步完善与网络信息技术的快速发展,极大程度地促进了临床医疗的全面开放和远程计算机监护系统的运用。瘦课(Sooc)网创新创业学分认证云平台作为一种新兴的互联网云平台之一,也被逐渐的引入临床医学领域。这不仅有力促进远程教育的健康发展,也对医院健康远程计算机监护系统的设计与应用提供了理论基础与实践经验。该研究为了填补云平台在心血管疾病患者健康远程监护在线这一空白,搭建基于Sooc
摘要:互联网流量日益增加,各种视频流媒体流量集聚扩增,各个内容提供商、运营商、服务商,以及各种系统也都部署了适合自己不同需求的缓存设备,以适应大流量的访问,提高访问速度,降低访问延时,给用户以更快,更流畅,更好的感知和服务。同时系统的增加势必带来诸多的问题,本文以缓存系统的特性为例,简述了某些特定业务在谷歌内核浏览器上无法使用的现象,并结合抓包和码流分析原因,同时给出了临时和最终的解决方案。  关
摘要:随着信息技术的不断发展,为了提高教学效率,信息类课程教学基本都在计算机实验室进行,计算机实验室使用率不断提高。因此,将6S管理模式应用到计算机实验室管理中,使计算机实验室工作环境整洁美观,方便教学,显得尤为必要。  关键词:6S;管理;计算机;实验室;探索;实践  中图分类号:G642 文献标识码:A  文章编号:1009-3044(2019)33-0071-02  1概述  在信息化发展背
摘要:该文介绍了区块链概念、分类及Fabric框架技术,分析了非学历在线教育之现状及面临的问题,给出了基于Fabric构建非学历在线教育学习成果认证系统的设计和原型实现过程,对构建终身学习型社会具有一定的理论指导意义和实际应用价值。  关键词:区块链;在线教育;成果认证  中图分类号:G642 文献标识码:A  文章编号:1009-3044(2019)35-0232-03  近两年,被金融市场“比
摘要:云服务是当代信息时代的热点产品,它通过其高性价比、高利用率、高可扩展性及高容错性等特点得到各个行业和领域的青睐。然而,国内仍有很多高校没有进行教育云的技术升级。该文通过探讨当前虚拟化技术存在的问题,结合高校业务需求分析了教育云建设的必要性和可操作性。通过整合高校已有硬件与网络资源提出了一套基于docker技术建设教育云的低成本解决方案,对教育教学信息化云平台建设有一定的借鉴作用。  关键词:
摘要:我国高职院校不断扩招,生源质量参差不齐,学生结构日趋多元。随着新媒体技术与教育教学的深入融合,不仅给高职院校带来了积极正向的影响,也在一定程度上带来了消极负向的影响。因此,如何有效利用新媒体带来的正向影响,规避负向影响,借助新媒体完善高职院校班风建设的实践机制就显得尤为重要。本文以新媒体的特点和班风的重要性作为切入点,详细分析了新媒体推进班风建设的不同形式和重要作用。  关键词:新媒体;高职
流是Java开发中的一个非常重要和基础的概念。本文通过文件复制程序的实现,介绍了流的概念、常见流类的使用方法及步骤。
摘要:本文列举了在当前C语言教学中存在的课程教学目标不够明晰、知识布局不够合理、过于注重语法知识的系统性、程序讲解方法有待改进以及程序案例选题范围不够广泛等问题,并针对这些问题提出了相应的对策。  关键词:教学目标;知识布局;真实情境法;推导构造  中图分类号:G642 文献标识码:A  文章编号:1009-3044(2019)33-0081-02  C语言程序设计这门课程在我国高校中广泛开设已有
摘要:在社会中互联网技术逐渐成熟的推动下,一部分高校借助各种平台去建立属于自己的图书馆“微服务”体系。但是由于技术等方面的原因,高校图书馆微服务发展存在一些这样那样的问题。本文根据这些出现的问题进行分析,期望找出构建高校图书馆微服务体系的最佳发展策略。  关键词:高校图书馆;微服务;服务体系  中图分类号:TP391 文献标识码:A  文章编号:1009-3044(2019)35-0217-02