Использование регулярных выражений для декодирования штрих-кода FMD - PullRequest
1 голос
/ 14 июля 2020

В настоящее время я пытаюсь разбить 2D-штрих-код, используя регулярное выражение для проверок ящура фармацевтических продуктов в системе c#. Штрих-код, используемый в штрих-коде матрицы данных.

Я новичок в регулярных выражениях и не имел опыта их использования, но получил фрагмент go выключен.

Проблема I Я имею в виду, что детали штрих-кода могут быть в любом порядке в следующем формате:

  • 01 = Номер GTIN (фиксированный 14 di git номер)
  • 10 = Пакет номер (переменная длина до 20 символов или с разделителями x1d)
  • 17 = срок годности (фиксированный 6 di git ГГММДД)
  • 21 = серийный номер (переменная длина до 20 символов или с разделителями 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)?).*$

Есть ли у кого-нибудь идеи, как это сделать?

1 Ответ

2 голосов
/ 14 июля 2020

Вы были очень близки к линии fini sh!

(?:01(\d{14})|10([a-zA-Z0-9]{1,20})(\\x1d)?|17(\d{6})|21([a-zA-Z0-9]{1,20})(\\x1d)?)

Просто добавьте группу без захвата вокруг вашего выражения и разделите все группы захвата с помощью | мы получаем выражение, которое net будет отображать ваши результаты в любом порядке!

Здесь есть одно предостережение: поскольку группа без захвата захватывает один из элементов за раз, только одна группа захвата в ней будет содержать любые данные, а остальные будут пустыми, поэтому вы должны написать пару строк кода, чтобы учесть это.

Вот ваш пример обновлен, вы можете видеть, что я имею в виду о пустых группах захвата в вашей замене. Но если вы обрабатываете каждое совпадение отдельно и смотрите только на группу захвата, которая что-то захватила, все будет в порядке!

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

Сообщите мне, если вы есть с этим проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...