首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用正则表达式解码FMD条码

使用正则表达式解码FMD条码
EN

Stack Overflow用户
提问于 2020-07-14 09:37:36
回答 1查看 322关注 0票数 2

我目前正在尝试分解一个2D条形码,使用正则表达式对c#系统中的药品进行FMD检查。数据矩阵条形码中使用的条形码。

我对正则表达式并不熟悉,也没有使用它们的经验,但是我得到了一个小片段。

我遇到的问题是,条形码的细节可以按任何顺序排列,格式如下:

x1d)

  • 17

  • 01= GTIN编号(固定14位数字)

  • 10=批号(可变长度可达20个字符,或用=过期日期(固定6位YYMMDD)分隔)
  • 21=序列号(可变长度可达20个字符,或以x1d)

分隔

在完美的世界里,我们会按照这样的顺序得到这些,但情况并不总是这样。

当按照上述顺序时,我们可以使用以下正则表达式:

代码语言:javascript
运行
复制
01(\d{14})10([a-zA-Z0-9]{1,20})(\\x1d)?17(\d{6})21([a-zA-Z0-9]{1,20})(\\x1d)?

例如,https://regex101.com/r/e5cpla/1

然而,当我按任何顺序尝试时,我似乎无法用这个表达式来识别内部的价值。我已经尝试了以下几点,但我没有得到预期的结果。

代码语言:javascript
运行
复制
(?=.*01(\d{14}))(?=.*10([a-zA-Z0-9]{1,20}))(?=.*(\\x1d)?)(?=.*17(\d{6}))(?=.*21([a-zA-Z0-9]{1,20}))(?=.*(\\x1d)?).*$

有人知道我们该怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-14 10:47:31

你离终点线很近!

代码语言:javascript
运行
复制
(?:01(\d{14})|10([a-zA-Z0-9]{1,20})(\\x1d)?|17(\d{6})|21([a-zA-Z0-9]{1,20})(\\x1d)?)

只要简单地在表达式周围添加一个非捕获组,并将所有捕获组分离出来,我们就会得到一个表达式,它将以任何顺序对您的结果进行网络化!

但是这里有一个警告:因为非捕获组一次捕获一个元素,它中只有一个捕获组将包含任何数据,而其他捕获组将是空的,因此您必须编写几行代码来说明这一点。

下面是更新的示例,您可以看到我对替换中的空捕获组的含义。但是,如果您单独处理每一场比赛,只看捕获组,它捕获了一些东西,您会很好!

https://regex101.com/r/e5cpla/2

如果你对此有任何意见,请告诉我。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62892203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档