`
阅: 1687 | 回: 12
发表于2022/7/22 9:45:48 楼主 
头像 等级:学有小成
积分:26
财富值:2.0
身份:普通用户

HVT QHB2E4LTENG40K222说明书,尺寸A4 (210*297mm),,材质70g双胶纸单黑印刷单面,厚度0.5mm

HVT QHB2E4LTENG40K333说明书,尺寸A4 (210*297*0.3mm),,材质70g双胶纸单黑印刷单面,厚度0.3mm


我举个例子,在这类的描述中,我想要分别提取尺寸与厚度,可见第一条需要提取为210*297mm,与0.5mm,第二条需提取的为210*297*0.3mm与0.3mm,好,在这个描述中,不能直接用\d查找,因为在开头的型号里就会带有数字,有很多无关的数字在一整段里,所以需要用定位的方法,如定位*,定位mm,

定位厚度的我是这么写的(?:(\d)+(.){1}(\d)+|(\d)+)(?:(mm)|(cm)),但是这条会把之前的尺寸的*0.3mm一起提取,所以需要加一个排除*的判断结果,这是我的第一个问题

定位210*297mm的正则好写,但是210*297*0.3mm的话,可能会提取出210*297、297*0.3、210*297*0.3这三个结果,我怎么让他判断有两个尺寸就出两个尺寸,有3个尺寸就出三个尺寸呢?这是我的第二个问题,谢谢各位大神

我的个性签名
发表于 2022/7/22 14:26:48   
头像 等级:学者
积分:88
财富值:0
身份:普通用户

回复:楼主


提供个文件
我的个性签名
发表于 2022/7/22 14:59:08   
头像 等级:学有小成
积分:26
财富值:2
身份:普通用户

回复:2楼 比如以这个栗子为标准案例,我将几种复杂的情况都罗列了一下,分别需要两个提取结果,重复的用|隔开,同时也请教一下怎么在正则表达中只匹配第一个结果,现在我用的工具里的匹配窗口选择全部匹配或者是部分匹配。

我的个性签名
发表于 2022/7/22 15:01:41   
头像 等级:学有小成
积分:26
财富值:2
身份:普通用户

回复:3楼


附件:   下载    在线编辑
我的个性签名
发表于 2022/7/22 15:19:12   
头像 等级:学者
积分:88
财富值:0
身份:普通用户

回复:3楼


试试:      \d+(\.\d+){0,1}([\*x](\d+(\.\d+){0,1})+){1,}([cm]m){0,1}



我的个性签名
发表于 2022/7/22 15:33:47   
头像 等级:学者
积分:88
财富值:0
身份:普通用户

回复:3楼


厚度没办法完全提取:   \d+(\.\d+){0,1}[^\d\.]*?$

个别特殊的需要自己手动提取,或先进行数据清洗


我的个性签名
发表于 2022/7/22 15:50:43   
头像 等级:学有小成
积分:26
财富值:2
身份:普通用户

回复:6楼


(?:([1-9]\d*\.?\d*)|(0\.\d*[1-9]))(?:(mm)|(cm)|(丝))

厚度我现在用这个,不过^不选取部分不能实现

我的个性签名
发表于 2022/7/22 15:59:49   
头像 等级:学有小成
积分:26
财富值:2
身份:普通用户

回复:7楼


就是我在琢磨怎么用[^(\*)|(x)]来排除掉前面尺寸带mm的部分

我的个性签名
发表于 2022/7/22 16:01:49   
头像 等级:学者
积分:88
财富值:0
身份:普通用户

回复:8楼


或者试试这样:     (?<=(厚度|厚|\s|,))\d+(\.\d+){0,1}(cm|mm|丝)

就是太死板了,需要指定所有可能的字符,而且不能是*x,不然还会出错


我的个性签名
发表于 2022/7/22 16:08:52   
头像 等级:学者
积分:88
财富值:0
身份:普通用户

回复:8楼


这样不能排除的,使用排除的话,只能提取的是个位数字的
我的个性签名
发表于 2022/7/22 16:32:14   
头像 等级:学有小成
积分:26
财富值:2
身份:普通用户

\d+(\.\d+){0,1}[^\d\.]*?$

这条只能用于厚度写在描述最末尾的情况,只要最后有字符串就会错误

我的个性签名

快速回复

目前不允许游客发表,请 登录 注册 后再发贴。