首页 > 其他分享 >正则表达式

正则表达式

时间:2022-12-10 22:12:53浏览次数:32  
标签:00 59 正则表达式 加班 Python 正常

前段时间人力姐姐遇到了难题,老板要求统计本月加班情况,要从飞书到处的文档中统计出每个人加班的天数和加班日期(每晚9:00之后算是加班,公司补贴30元),人工统计工作量很大,因此问我有没有好用的Excel筛选公式。我相信这个需求用Excel也是可以做的,可是我不会,所以就想用Python写个数据处理的脚本帮她统计一下,经过折腾实现了她要的功能。期间用到的主要技术点就是正则表达式筛选字符串,想到正则表达式是与编程语言无关的通用知识,因此更应该掌握,在此记录一下。
首先讲一下实现思路飞书导出的考勤统计表如下图所示,每列都是一个工作了,我们统计的加班情况就是工作日每天正常上班(10:00)之前,晚上9:00之后下班。表格中每行都是一位员工,每列是一天,因此第一层循环读取每位员工的出勤情况,第二层循环就是判断是否加班,实际上就是统计每个单元格是否包含字符串“正常(9:00-10:00),正常(21:00-次日4:00),这里定了一个规则最晚的下班时间为次日凌晨4:00(应该不会有卷王这么晚下班吧!),此时就需要正则表达式出场了。
image.png
首先是语言环境,为了快速开发选择的开发语言是Python,使用Anaconda + Pycharm的组合(之前就装的,并不是为了这个小任务单独装的)。另外还要安装一个读取excel的库xlrd,不得不说Anaconda创建虚拟环境安装Python包确实很方便,直接 pip install xlrd就可以,几乎不可能出错,在Windows环境下开发Python强烈安利,另外还要注意的是在Pycharm中选择”Python Interpreter“时要选择安装xlrd库的环境,怎么设置在此不赘述了(File->settings->Python Interpreter)。
首先导入Python库:

import xlrd #excel读取
import re  #正则表达式

设计正则表达式匹配规则,以下就是匹配字符串”正常(0:00-9:59)“上班,正常*****,正常(21:00-23:59)"即9点后下班,因为不想写的太长所以分成两条规则,中间还有一些特殊情况比如正好10:00打卡上班、第二天凌晨之后打卡下班等等都单独设计了匹配规则,这些就不再展开了。这里用到的正则表达式语法有".","[]",""等,其他的语法用到时可以单独查。

reg1=r"正常.[0][0-9].[0-5][0-9].*正常" #正则表达式,0:00-9:59上班
reg2=r"正常.*正常.[2][1-3].[0-5][0-9]."#21:00-23:59下班
设计完正则表达式之后该怎么用呢?相信这也是许多人学完之后的疑惑,下面结合代码看:
 for i in range(row):
     counter=0
        for j in range(col):
            m = re.search(reg1, str(obj_sheet.cell_value(i, j)))  
			if(m is None):
                 m = re.search(reg2, str(obj_sheet.cell_value(i, j))) 
             if(m is not None ): #此时m.string就是包含加班时间的字符串
                counter+=1 

其实就是利用上面设计好的规则去search目标字符串,找到的话就会返回这个串,否则为None。之后利用这个信息可以统计,也可以做成明细给老板看了-_-!

标签:00,59,正则表达式,加班,Python,正常
From: https://www.cnblogs.com/JXL-Blogs/p/16972428.html

相关文章

  • Day37:正则表达式详解
    正则表达式1.1概述正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。比如我们在网站上输入用户账号,要求我们输入的账号信息要符合账号的格式,而校......
  • 前端开发系列034-基础篇之RegExp正则表达式
    title:'前端开发系列034-基础篇之RegExp正则表达式'tags:-javaScript系列categories:[]date:2017-09-1720:20:13本文介绍RegExp相关的知识点,包括正则表达式的......
  • Python正则表达式
    Python正则表达式情况:在一个EXCEL文件中,记录了众多公司的账目,单位有万元和亿元,彼此混杂。现想把单位统一为万元,且不显示出来法一:利用EXCEL的公式=IF(VALUE(MID(B2,1,......
  • 16. 正则表达式.md
    正则表达式定义:正则表达式用于定义一些字符串的规则作用:计算机可以根据正则表达式,来检查一个字符串是否符合指定的规则:或者将字符串中符合规则的内容提取出来创建正则表......
  • C++ Primer学习笔记 - 第17章 标准库特殊设施(正则表达式)
    目录17.3正则表达式17.3.1使用正则表达式17.3.2匹配与Regex迭代器类型17.3.3使用子表达式17.3.4使用regex_replace17.3正则表达式正则表达式(regularexpression)是......
  • nginx中的正则表达式,location路径匹配规则和优先级
    前言,我这里验证的nginx-v1.23.2单机环境下的nginx中的正则表达式、location路径匹配规则和优先级。先准备好环境,基础配置是这样nginx/conf/conf.d/host.conf:server{......
  • 正则表达式(Swift5.7)
    课题使用正则表达式匹配字符串使用正则表达式"\d{3}-(\d{4})-\d{2}"匹配字符串"123-4567-89"返回匹配结果:’"123-4567-89"以及"4567"使用正则表达式替换字符串(模......
  • 正则表达式
    正则表达式#私藏项目实操分享#//varreg=/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1......
  • js 正则表达式
     创建正则两种方式字面量创建正则constr=/test/;对象创建正则letr1=newRegExp("test")调用正则的test方法判断是否符合规则返回true或falseconsole.log(r.test('test')......
  • 正则表达式收藏
    一个好的网站:http://regex-lib.net/Home/有很多正则表达式  匹配中文字符的正则表达式:[/u4e00-/u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双......