У меня есть строка, разделенная символом трубы.Это повторяемая последовательность:
<machinenr>|<controldone>|<nrofitems|<items>
Однако там, где вы видите тег items, у вас будут номера предметов, разделенные символом трубы между ними.Ну, это не умный формат, но я должен решить его, и я хочу сделать с регулярным выражением в C #.Таким образом, предполагая, что приведенный выше формат дает реальный пример:
446408|0|2|111|6847|446408||0||
Обратите внимание, что теоретически не должно быть значения между каналами, а также содержимое не ограничено длиной.Идентификатор элемента может быть 111 или 877333, но даже смешанный буквенно-цифровой идентификатор XB111.Итак, у нас есть две машины без предметов:
446408|0|0||447400||0||
Здесь у нас есть несколько машин без или с некоторыми предметами.Обратите внимание, что символ трубы также используется для разделения элементов, поэтому у вас есть трубы внутри труб:
446408|0|1|111|446408|0|3|99884|111|73732|446408|0|0||
В этом аппарате есть три элемента: 446408 | 0 | 3 | 99884 | 111 | 73732 |
Идентификатор предмета:
99884|111|73732
Как должно выглядеть регулярное выражение?Я пробовал с именованными ниже группами (легче читать), но это просто не работает:
^(?P<machinenr>.*?)\|
(?P<controldone>.*?)\|
(?P<nrofitems>.*?)\|
(?P<items>.*?)\|
Вот пояснение для @Atterson @sln и @.Обратите внимание, что количество предметов может быть 0-н, нет ограничений на количество.Давайте возьмем этот пример, длинную строку с машинами и их элементами: 446408 | 0 | 1 | 111 | 446408 | 0 | 3 | 99884 | 111 | 73732 | 446408 | 0 | 0 ||Я ожидаю, что регулярное выражение будет разбивать эту строку на три совпадения / части и их значения, первое совпадение: 446408 | 0 | 1 | 111 |второй матч: 446408 | 0 | 3 | 99884 | 111 | 73732 |и третий матч: 446408 | 0 | 0 ||Итак, чтобы взять пример значений, на которые каждая часть должна быть разбита, давайте используем второе совпадение / часть.Это машина с номером 446408, она не контролируется 0, у нее есть 3 позиции, идентификаторы: 99884 | 111 | 73732.После этих пунктов может следовать новая последовательность:
<machinenr>|<controldone>|<nrofitems|<items>
.@Sanxofon, пожалуйста, проверьте свое регулярное выражение здесь: [ссылка] https://regex101.com/r/kC3gH0/87, и вы увидите, к сожалению, оно не соответствует.