Powershell – регулярные выражения. Преобразуем Kb,Mb,Tb,Pb в тексте.


В Powershell есть встроенные средства работы с регулярными выражениями (Regular Expression). Наличие таких средств в языке делает использование регулярных выражений простым и доступным. Но это имеет побочный эффект: возможности встроенных средств меньше, чем возможности регулярных выражений, реализованных в .Net.

Вот оператор –replace. Этот оператор может многое. Но [Regex]::Replace может больше.

Рассмотрим такую задачу: нужно преобразовать в тексте выражения типа 1Mb в числовое выражение.

Например, «Size=1Tb» -> «Size=1099511627776»

При использовании оператора –replace нужно писать целую программу, чтобы выделить, вычислить и заменить все варианты чисел с Kb,KB,Mb,MB,Tb,TB,Pb,PB.

При использовании модификации [Regex]::Replace с четырьмя параметрами всё выглядит намного понятнее и изящнее:

</p><p>$td = @"
</p><p>      Size1 = 1Mb,
</p><p>      Size2 = 2Gb,
</p><p>      Size3 = 3Tb
</p><p>"@
</p><p> 
 </p><p>$Evaluator = {param($Match) Invoke-Expression "$Match"}
</p><p>$td1 = [Regex]::Replace($td,"((\d)+(Kb|Mb|Gb|Tb|Pb))",$Evaluator, @('IgnoreCase'))
</p><p>$td1
</p><p>

Мне нравится изящный код. А вам? J

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: