我目前正在尝试分解一个2D条形码,使用正则表达式对c#系统中的药品进行FMD检查。数据矩阵条形码中使用的条形码。
我对正则表达式并不熟悉,也没有使用它们的经验,但是我得到了一个小片段。
我遇到的问题是,条形码的细节可以按任何顺序排列,格式如下:
x1d
)
x1d
)分隔
在完美的世界里,我们会按照这样的顺序得到这些,但情况并不总是这样。
当按照上述顺序时,我们可以使用以下正则表达式:
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
然而,当我按任何顺序尝试时,我似乎无法用这个表达式来识别内部的价值。我已经尝试了以下几点,但我没有得到预期的结果。
(?=.*01(\d{14}))(?=.*10([a-zA-Z0-9]{1,20}))(?=.*(\\x1d)?)(?=.*17(\d{6}))(?=.*21([a-zA-Z0-9]{1,20}))(?=.*(\\x1d)?).*$
有人知道我们该怎么做吗?
发布于 2020-07-14 10:47:31
你离终点线很近!
(?: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
如果你对此有任何意见,请告诉我。
https://stackoverflow.com/questions/62892203
复制相似问题