Powershell, оператор –split и регулярные выражения
Потребовалось решить относительно простую задачу – разделить строку на секции с использованием разделителей (банально), выделяя при этом также некоторые устойчивые последовательности в отдельные секции (об этом и пойдёт речь). И поможет нам в этом оператор –split и регулярные выражения.
Сразу приведу код и его результат:
'ЛТК203-О.22.33.444' -split '(Э)|(СТС)|(ЛТК)|(?:[\.|-])' ЛТК 203 О 22 33 444
Код на первый взгляд простой. Мне нужно разделить исходную строку по разделителям (- и .), но при этом в качестве отдельных подстрок следует также рассматривать устойчивые аббревиатуры (такие как ЛТК, СТС, Э и так далее). И помог мне оператор split
.
Регулярное выражение при таком применении в операторе split
следует понимать следующим образом: любой положительный результат (результативный захват) рассматривается оператором как разделитель, и часть строки до захваченной области (если захват не в начале строки) рассматривается как очередной элемент результата. При этом, если захваченный “разделитель” так же не пуст (то есть не оформлен как (?:…)
), он так же рассматривается в качестве следующего результата.
Итак, мы пишем регулярное regExp для поиска именно разделителей, хотя и вынуждены потом явно исключить их из захвата (применив (?:…)
).
Такой вот удивительный оператор split
.
RSS комментарии
Обратная ссылка