Статья размещена автором Бетке Сергей Сергеевич

Powershell, оператор –split и регулярные выражения

Потребовалось решить относительно простую задачу – разделить строку на секции с использованием разделителей (банально), выделяя при этом также некоторые устойчивые последовательности в отдельные секции (об этом и пойдёт речь). И поможет нам в этом оператор –split и регулярные выражения.

Сразу приведу код и его результат:

'ЛТК203-О.22.33.444' -split '(Э)|(СТС)|(ЛТК)|(?:[\.|-])'

ЛТК
203
О
22
33
444

Код на первый взгляд простой. Мне нужно разделить исходную строку по разделителям (- и .), но при этом в качестве отдельных подстрок следует также рассматривать устойчивые аббревиатуры (такие как ЛТК, СТС, Э и так далее). И помог мне оператор split.

Регулярное выражение при таком применении в операторе split следует понимать следующим образом: любой положительный результат (результативный захват) рассматривается оператором как разделитель, и часть строки до захваченной области (если захват не в начале строки) рассматривается как очередной элемент результата. При этом, если захваченный “разделитель” так же не пуст (то есть не оформлен как (?:…)), он так же рассматривается в качестве следующего результата.

Итак, мы пишем регулярное regExp для поиска именно разделителей, хотя и вынуждены потом явно исключить их из захвата (применив (?:…)).

Такой вот удивительный оператор split.

Опубликовать комментарий

XHTML: Вы можете использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags Связь с комментариями статьи:
RSS комментарии
Обратная ссылка