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

news2024/9/26 22:58:42

从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的好处是替换,查找等文本操作全部可以用程序完成,且可以做到批量处理,经过两个多小时的努力测试,基本完成要求!

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

    #修改电阻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.coloradmin.cn/o/430262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[网络安全]第三次作业

目录 1. 什么是IDS? 2. IDS和防火墙有什么不同? 3. IDS工作原理? 4. IDS的主要检测方法有哪些详细说明? 5. IDS的部署方式有哪些? 6. IDS的签名是什么意思?签名过滤器有什么作用?例外签名…

温故c语言——深度剖析数据在内存中的存储

目录 数据类型详细介绍整形在内存中的存储:原码、反码、补码大小端字节序介绍及判断浮点型在内存中的存储解析 1. 数据类型介绍 基本内置数据类型有: //在内存中占用空间的大小 char //字符数据类型 占用1个字节 short //短整型 占用2个…

linux及openEuler破解root密码

第一步:开机的时候按键盘的字母 E 键, 进入引导模式 第二步:进入引导模式 :找到linux这一行,按键盘上的end 键,跳转到行尾,输入: init/bin/sh 修改完后,按键盘上的 ctr…

电脑开机出现英文字母开不了机U盘重装系统教学

电脑开机出现英文字母开不了机U盘重装系统教学。有用户电脑开机之后出现了错误代码字母,无法正常的开机了。遇到这个问题要怎么去进行系统的重新安装呢?一起来看看以下的具体解决方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上…

基于LS1028 TSN时间敏感网络交换机方案(一)TSN介绍

2.1 时间敏感网络介绍 时间敏感网络小组的前身是 AVB ,即以太网音视频桥接技术( Ethernet Audio/Video Bridging, 简称 Ethernet AVB ) [10] 。它在传统以太网络的基础上,通过 精确时钟同步、预留带宽、流量整形&#xff0…

Spring和IDEA都不推荐用的@Autowired注解,为什么还有那么多人用?

Autowired的默认装配 我们都知道在spring中Autowired注解,是用来自动装配对象的。通常,我们在项目中是这样用的: package com.sue.cache.service;import org.springframework.stereotype.Service;Service public class TestService1 {publ…

今天面了个京东拿 38K 出来的,让我见识到了基础的天花板

今年的春招已经开始了,很多小伙伴收获不错,拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的软件测试面试题和八股文,为此咱这里也统一做一次大整理和大归类,这也算是划重点了。 俗话说得好&#xff0…

ChatGPT接入Siri(保姆级教程)

ChatGPT接入Siri(保姆级教程)第一步:获取OpenAPI的Key第二步:制作快捷指令今天,我将为大家分享如何将GPT应用集成到苹果手机的Siri中(当然手机是需要魔法(TZ)的) 第一步…

协议篇之UART协议

协议篇之UART协议一、写在前面二、UART协议简介三、UART协议数据帧结构3.1 UART发送过程3.2 UART接收过程四、UART传输速率五、写在最后一、写在前面 由于设计需要,需要入门学习一下UART协议。本文主要学习UART协议的数据帧结构。 二、UART协议简介 通用异步收发传…

AutoGPT自主AI正在路上#趋势:自主人工智能、人机交互、终身学习

hi,大家好,我是shadow。今天分享一些我看到的人工智能正在发生的趋势,以及创新的机会。一些动态经过几个月的筹备,慢慢地我会开启2023的Mixlab故事,可查看公众号菜单栏里的2023专栏。本周六和下周六我将在上海的活动分…

Thingsboard开源物联网平台智慧农业实例快速部署教程(三)【源码部署及logo更换】

Thingsboard源码安装并更换logo 文章目录Thingsboard源码安装并更换logo1. 源码拉取2. 导入项目3. 项目编译4. 项目启动5. 修改logo6. 部署(rpm deb方式)1. 源码拉取 本教程按照3.4发行版本行进 git clone https://github.com/thingsboard/thingsboard…

深入拆解 Java 虚拟机-打卡|01 | Java代码是怎么运行的?

文章目录Java代码是怎么运行的?几个为什么为什么在虚拟机中运行?Java 虚拟机具体又是怎样运行 Java 代码的呢?Java虚拟机的运行效率怎么样?总结Java代码是怎么运行的? 来来来,运行个"Hello word !“告诉我是怎么…

免费的VR全景网站是什么?免费VR全景网站有什么用?

虚拟现实(VR)技术的应用日益广泛,尤其是在旅游、教育等领域。免费VR全景网站是一个新兴的平台,为用户提供了一个全新的探索未知世界的方式。 一、介绍免费VR全景网站的特点 1.全景视角 免费VR全景网站提供了360度全景视角&#…

Spring事务原理、隔离性

1、什么是事务 事务是指将一系列数据操作捆绑成为一个整体进行统一管理,如果某一事务执行成功,则在该事物中进行的所有数据更改均会提交,成为数据库中的永久组成部分;如果事务执行时遇到错误且必须取消或回滚,则数据将…

Vue3页面内跳转锚点-scrollIntoView()

scrollIntoView() scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域。 element.scrollIntoView(); // 等同于element.scrollIntoView(true)element.scrollIntoView(alignToTop); //布尔参…

数据结构-树与二叉树

文章目录5.1 树的基本概念5.1.1 树的定义5.1.2 基本术语5.1.3 树的性质5.2 二叉树的概念5.2.1 二叉树的定义及其主要特性5.2.2 二叉树的存储结构5.3 二叉树的遍历和线索二叉树5.3.3 二叉树的遍历5.3.2 线索二叉树5.4 树、森林5.4.1 树的存储结构5.4.2 树、森林、二叉树的转换5.…

Linux学习笔记——HTTP协议

文章目录前言HTTP协议的概念URLurlencode和urldecodeHTTP协议格式HTTP协议版本HTTP协议请求方法GET方法——获取资源POST方法——获取资源PUT方法——传输⽂件PUT方法——获得报文首部在这里插入图片描述DELETE方法——删除文件OPTIONS方法——询问支持的方法HTTP的状态码HTTP常…

050:cesium加载mapbox卫星地图、mapbox地形地图

第050个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载mapbox卫星地图、mapbox地形地图。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共79行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设…

【CE】图形化作弊教程通关手册(超真实的游戏体验)

▒ 目录 ▒🛫 导读需求开发环境1️⃣ 第一关翻译操作总结2️⃣ 第二关(代码共享)翻译操作验证3️⃣ 第三关翻译操作总结🛬 文章小结📖 参考资料🛫 导读 需求 除了Tutorial-x86_64.exe教程外,CE…

算法,离你并不遥远

算法,离你并不遥远引子什么是算法?为什么算法很重要?什么时候开始学算法?狭隘的算法定义算法从现在学起,从现在用起算法永不过时引子 今天又是搬砖摸鱼胡混的一天,在问答闲逛,看到了一个问答&a…