Получить текст между группой разделителей - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть строка текста с четырьмя разделителями ST: SI: T: и I:, за которыми следует последовательность цифр и цифр. Мне нужно взять разделитель как группу под названием group, а цифры и цифры - как code.

ST:12YEOR48000FCT:24YEOR48000FCSI:12YEOR13000FCI:12YEOR13000FCT:12YEOR51200FCI:12YEOR14500FCST:12YEOR48000FCT:24YEOR48000FCSI:12YEOR13000FCI:12YEOR13000FCT:12ACTYEI:12ACTYET:32000ACTFCI:13300ACTFC

Результат должен быть

GROUP CODE
ST:   12YEOR48000FC
T:    24YEOR48000FC
SI:   12YEOR13000F
CI:   12YEOR13000F
CT:   12YEOR51200F
CI:   12YEOR14500FC
ST:   12YEOR48000F
CT:   24YEOR48000FC
SI:   12YEOR13000F
CI:   12YEOR13000F
CT:   12ACTYE
I:    12ACTYE
T:    32000ACTFC
I:    13300ACTFC

(?'group'ST:|SI:|T:|I:)(?'code'.*?)(?<=ST:|SI:|T:|I:|$)

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

Спасибо за любую помощь.

RegEx101

1 Ответ

1 голос
/ 09 апреля 2019

Вы используете позитивный взгляд для своей группы code, который не будет выполнять ту функцию, которую вы ищете.

Однако вы на правильном пути! Удаление < для создания позитивного взгляда впереди приведет к тому, что вы ищете:

(?'group'ST:|SI:|T:|I:)(?'code'.*?)(?=ST:|SI:|T:|I:|$)

Regex101

Вам также следует подумать о том, чтобы немного оптимизировать шаблон для удобства сопровождения, используя вложенные группы соответствия, чтобы разбить токен двоеточия для каждого из ваших элементов group. Это упростит добавление group кодов позже и ограничит вероятность опечаток (т. Е. Забыв двоеточие в новом group коде):

(?'group'(?:ST|SI|T|I):)(?'code'.*?)(?=(?:ST|SI|T|I):|$)

Regex101

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