从EXCEL BOM 描述中提取部分信息---正则表达式使用

news/2024/7/21 5:38:40 标签: excel, python, 正则

从EXCEL BOM描述中提取关键的信息,用于建库填写内容,或者检查BOM等都会用到,如下大概通过两种方式实现信息的提取

1.手动Excel中提取

2.将如上1的方式用python实现,可以实现批量操作,减少操作带来的错误,明显提高干工作效率

目录

1.手动Excel中提取

1. 分列:适用于固定格式

2.ctrl+e快捷键的作用

3.正则表达式

Excel 使用正则表达式

 在线正则表达式测试平台

2.使用Python Openpyxl和RE库实现

案例说明:

从如下这个电阻的BOM信息中,通过描述信息,提取到value和footprint的信息

R0000212片状电阻 Precise SMD resistor厚膜电阻 86.6KΩ ±1% 1/20W SMD 0201(公制0603)RC0201FR-0786K6LYAGEO(国巨)
具体的描述为:
Description = 厚膜电阻 86.6KΩ ±1% 1/20W SMD 0201(公制0603)

提取最终的value为(根据自己的需求) 

value = 86.6K;1%;0201

提取最终的footprint为:

footprint = SR0201

1.手动Excel中提取

想到的Excel操作

1. 分列:适用于固定格式

通过多个数据分析,面试信息虽然有基本相同的格式,但是也不是完全相同,因此不能使用分列完成。

2.ctrl+e快捷键的作用

此操作基本可以完成80%的信息,但是有部分因格式不完全相同会匹配信息不全,而且每次匹配完还需要人工再对一下,再没有更好的办法之前这个是比较好的办法。

3.正则表达式

因Excel本身不带正则表达式,因此使用宏自定义函数,再使用自定义的RE函数执行正则表达式,

注:对于正则表达式,如一次正则不能完全涵盖所有情况,可以使用筛选后多次匹配来完成,另外操作完后对应的列是=RE公式,还需要复制粘贴为文本

4.其它方式

如Access是否也具有提取信息的功能?个人不熟悉

Excel 使用正则表达式

EXCEL中如何使用正则表达式_excel 正则表达式_普通网友的博客-CSDN博客

需要自定义RE函数,然后使用RE函数,这里直接复制如上链接的代码,按SOP操作,不需要懂原理也可以操作。

Function RE(OriText As String, ReRule As String, ReplaceYesOrNo As Boolean)
'''
'OriText:待匹配的字符串
'ReRule:正则表达式
'ReplaceYesOrNo:是否采用替换方法,1表示替换,0表示不替换,默认为不替换
'''
'创建一个正则表达式实例对象
Set ReObject = CreateObject("vbscript.regexp")
 
With ReObject
 
    '是否区分大小写,一般需求是不用区分大小写,因此这里为True
    .IgnoreCase = True
    
    '是否匹配所有,一般需求也都是匹配所有,这里也就默认是True,如果为False表示只匹配第一次出现的
    .Global = True
    
    '匹配时所用到的正则表达式
    .Pattern = ReRule
    
    If ReplaceYesOrNo Then
        
        '如果使用替换方法,则将正则表达式匹配到的项替换为空
        RE = .Replace(OriText, "")
        
    Else
        '否则,返回可迭代对象的第一项
        RE = .Execute(OriText)(0)
    End If
    
End With
End Function

 如上是部分测试;

 在线正则表达式测试平台

正则表达式在线测试 | 菜鸟工具

3个正则表达式在线自动生成器(正则表达式自动生成工具)-老部落

正则语法如下

. - 除换行符以外的所有字符。
^ - 字符串开头。
$ - 字符串结尾。
\d,\w,\s - 匹配数字、字符、空格。
\D,\W,\S - 匹配非数字、非字符、非空格。
[abc] - 匹配 a、b 或 c 中的一个字母。
[a-z] - 匹配 a 到 z 中的一个字母。
[^abc] - 匹配除了 a、b 或 c 中的其他字母。
aa|bb - 匹配 aa 或 bb。
? - 0 次或 1 次匹配。
* - 匹配 0 次或多次。
+ - 匹配 1 次或多次。
{n} - 匹配 n次。
{n,} - 匹配 n次以上。
{m,n} - 最少 m 次,最多 n 次匹配。
(expr) - 捕获 expr 子模式,以 \1 使用它。
(?:expr) - 忽略捕获的子模式。
(?=expr) - 正向预查模式 expr。
(?!expr) - 负向预查模式 expr。

也可以使用python openpyxl操作excel,使用Python re正则表达式完成操作

2.使用Python Openpyxl和RE库实现

实现如上1的全部操作

需要具备一点python基础,主要使用的库就是openpyxl和re

re 匹配模式可以提前在线测试好,使用python的好处是替换,查找等文本操作全部可以用程序完成,且可以做到批量处理,经过两个多小时的努力测试,基本完成要求!

 如下是处理电阻最主要的几个函数,可以看到基本是把手工操作全部用代码实现了。

python">    #修改电阻value的内容
    def modifyValue(self,value):
        # 去掉空格
        value = value.replace(" ", "")
        #mΩ电阻使用mR标识
        if 'mΩ' in value:
            value = value.replace("mΩ","mR")
        # 去掉Ω
        value = value.replace("Ω", "")
        # 去掉±
        value = value.replace("±", ";")
        # 去掉SMD
        value = value.replace("SMD", ";")
        print(value)
        return value
    #向Excel特定cell写入值
    def writeValue(self,row,col,value):
        # 写入对应的value 列
        logging.info('向Excel中写入value {}'.format(value))
        self.sheet.cell(row, col, value)
    
def setResValue(self,strValue):
        column = self.getCellColum(strValue)
        valueCol = self.getCellColum('Value')
        print(valueCol)
        #遍历打印每行的描述
        logging.info('excel sheet is  {}'.format(self.sheet))
        for row in range(2,self.sheet.max_row + 1):
            descrip = self.sheet.cell(row,column).value
            print(descrip)
            #处理电阻描述的正则表达
            valuePattern = re.compile(r'(\d+([.]\d+)?)\w?[Ω]\s?[±](\d+([.]\d+)?)[%]')
            packagePattern = re.compile(r'SMD\s\d+')
            valueMo = valuePattern.search(descrip)
            packageMo =packagePattern.search(descrip)
            if valueMo is not None:
                #如匹配成功处理完后写入对应的excel 列
                value = valueMo.group() + packageMo.group()
                value = self.modifyValue(value)
                self.writeValue(row,valueCol,value)

总结:

如上内容的核心还是正则表达式

1.对于正则表达式一开始不熟悉,可以使用在线测试,尤其在线测试中有可视化工具 ,很快就可以完成表达式,是不是也有自动生产正则表达式的工具,比如我开头举得栗子作为输入,是否可以直接产生正则表达式?目前还没找到,如有这种工具,还望友友们推荐。

2.如上提到的python操作excel,主要用的就是读取和写入内容,没有多少工作量,剩余的基本都是文本操作,比如查找替换等

正则的学习,如下这个工具也基本够用

正则表达式可视化工具 | 菜鸟工具


http://www.niftyadmin.cn/n/237208.html

相关文章

初识hibernate

JPA 什么是JPA? 相同处: 1.都跟数据∙库操作有关,JPA 是JDBC 的升华,升级版。 2.JDBC和JPA都是一组规范接口3.都是由SUN官方推出的 不同处: 1.JDBC是由各个关系型数据库实现的, JPA 是由ORM框架实现 …

Experiment03数据可视化

1.如果X和Y均为46矩阵,则执行plot(X,Y)命令后在图形窗口中绘制( )条曲线 答:6 2.subplot(3,3,5)是指三行三列中( )的子图。 答:第二行第二列 3.已知x0.1:0.1:10, 如果要使函数y3*ln(x)的曲…

【高危】vm2 <3.9.17 沙箱逃逸漏洞(POC)(CVE-2023-30547 )

漏洞描述 vm2 是一个基于 Node.js 的沙箱环境,可以使用列入白名单的 Node 内置模块运行不受信任的代码。 由于 CVE-2023-29199 的修复不完整,vm2 3.9.17 之前版本的 transformer.js 文件中的 transformer 函数异常处理逻辑存在缺陷。攻击者可以利用这个…

8.基于拉丁超立方法的风光场景生成与削减

matlab代码:基于拉丁超立方法的风光场景生成与削减 摘要:与蒙特卡洛法不同,拉丁超立方采样改进了采样策略能够做到较小采样规模中获得较高的采样精度,属于分层抽样技术,设定风光出力遵从正态分布normrnd,从…

Linux环境下:Zookeeper-3.5.7安装部署

Linux环境下:Zookeeper-3.5.7安装部署 官方下载地址https://zookeeper.apache.org/ 本地模式安装部署 1)安装前准备 (1)安装Jdk1.8.0 (2)拷贝Zookeeper安装包到Linux系统下 (3)解…

Debezium同步之同步部署

目录 1. Docker 安装 参考网站: 1.1 删除旧版本 1.2 安装 Docker Engine-Community 1.3 安装特定版本

搭建系统。

前言:为了应对大量简单页面的生产需求而设计的一种工具型产品就是搭建系统,它的目标非常明确,就是快速生产大量的页面。 这节我们来了解搭建系统 搭建系统的设计 几种常见的搭建系统的设计 第一种,是模板化搭建,由前…

Visual Studio如何使用Qt开发桌面软件?

文章目录0.引言1.开发环境配置2.编写第一个Qt程序0.引言 笔者熟悉的第一门编程语言是C#,当初本科毕业设计需要进行Qgis的二次开发,本想利用C#编程,但网上资料较少,多是利用Qt进行Qgis的二次开发,Qt是利用C编程&#xf…