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

news/2024/11/24 6:02:07/

从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 = ReRuleIf ReplaceYesOrNo Then'如果使用替换方法,则将正则表达式匹配到的项替换为空RE = .Replace(OriText, "")Else'否则,返回可迭代对象的第一项RE = .Execute(OriText)(0)End IfEnd 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("±", ";")# 去掉SMDvalue = 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).valueprint(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.ppmy.cn/news/47261.html

相关文章

WPS表格查找替换技巧:让你的工作效率翻倍

WPS表格中查找和替换是最基础的操作,看似简单,但是还有很多人在工作中不会熟练使用,其实掌握一些小技巧可以快速提高工作效率,本节课就来介绍几种比较有效的“查找和替换技巧”。 本节课目录: 1、常规的查找和替换 2…

PHP - 什么是 PHP? 为什么用 PHP? 有谁在用 PHP?

什么是 PHP? PHP 是一种脚本语言, "PHP Hypertext Preprocessor" 的首字母缩略词 PHP 语法吸收了 C 语言、Java 和 Perl 的特点,利于学习,使用广泛,主要适用于 Web 开发领域. PHP 是由 Rasmus Lerdorf 于 1…

App Inventor 2 开发问答App

应用介绍 一个最基本的问答App开发,问答数据源来自csv文件格式,方便后续拓展成网络版的问答App。 事先出好题目、ABCD选择项及正确答案,先存在列表中,然后按顺序出题,答对则继续下一题,答错则Game over。 …

C# 中的异步编程模型(Async/Await)和并行编程模型(Parallel)。

C# 中的异步编程模型(Async/Await)和并行编程模型(Parallel)是在处理异步操作和并行处理任务方面非常重要的概念。 异步编程模型(Async/Await): 异步编程模型(Async/Await&#xf…

React 条件渲染组件

组件通常需要根据不同的条件显示不同的内容,以及根据应用的状态变化只渲染其中的一部分。 在 React 中,可以使用 JavaScript 语法有条件地呈现 JSX,比如 if 语句、&&和 ?: 操作符。 根据条件返回 JSX Demo.js 文件: …

Spring之 @Configuration

Spring 提供了丰富的特性和功能,包括依赖注入、面向切面编程、事务管理、数据访问、Web应用程序开发等。其中,Configuration 是 Spring 中的一个注解,它用于标记一个类为配置类,通过配置类可以定义和组装 Spring Bean,…

缓存优化---环境搭建

缓存优化 为什么要使用redis缓存&#xff1f; 问题说明 用户数量多&#xff0c;系统访问大&#xff0c;频繁访问数据库&#xff0c;系统性能下降&#xff0c;用户体验差 环境搭建 maven坐标 在项目中的pom.xml文件中导入spring data redis的maven坐标&#xff1a; <depen…

数据结构---二叉树

专栏&#xff1a;数据结构 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;这里是HaiFan.的数据结构专栏&#xff0c;今天的内容是二叉树。 二叉树 树的概念及结构二叉树概念及结构二叉树的概念二叉树的存储结构 二叉树的顺序结构及实现大根堆和小根堆堆的实现及其各个接口堆…