Regex разбивает строку на char, но с максимальным размером - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь построить регулярное выражение в C #, чтобы сопоставить мои отсканированные штрих-коды с группами (коды GS1). Таким образом, каждое поле имеет регулярное выражение для обрезки потока, но символ FNC1 - это конец поля и от 1 до 30 цифр перед, это значение, а первые 2 цифры - идентификатор приложения.

Простой пример:

var value = "9212345678\u00053302123456";
var regex = "((?<Field>([\d]{2}))(?<Value>(\d{1,30}$)).*?)(?<FNC1>[\x00-\x1f\x80-\xFF])";

Result:
Field -> 92
Value -> 12345678
FNC1 -> (char) 5

Но если размер значения превышает 30 цифр, он все равно соответствует, но не разделителю FNC1. Я попытался использовать позитивный прогноз, но потом он просто развернул совпадения на 30 цифр от конца группы значений.

Может ли кто-нибудь дать мне направление, в котором я должен искать?

Edit: Чтобы уточнить это: Поле - это первые 2 цифры в моей строке, затем у меня есть от 1 до 30 цифр, оканчивающихся знаком FNC1 (здесь символ 5 или что-то необычное, как вы могли бы сказать). Если строка значения составляет 33 цифры, она не должна совпадать со значением в регулярном выражении.

Так что этот не должен совпадать:

var value = "921234567890123456789012345678901\u00053302123456";

И значение, стоящее за делителем FNC1, соответствует следующим кодам, в данном примере это «3302123456». Это был бы реальный пример из сканирования.

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете использовать

^(?<Field>\d{2})(?<Value>\d{1,30})(?<FNC1>[\x00-\x1f\x80-\xFF])

См. Демоверсию regex

Детали

  • ^ - начало строки
  • (?<Field>\d{2}) - Группа захвата "Поле": две цифры
  • (?<Value>\d{1,30}) - Группа захвата "Значение": от одной до тридцати цифр
  • (?<FNC1>[\x00-\x1f\x80-\xFF]) - Группа захвата "FNC1": символ из указанных диапазонов в классе символов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...