проанализировать имя пакета и номер версии, используя powershell - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть строки, в которых я должен анализировать имя и номер версии как отдельные поля. Номер версии может также включать алфавиты.

Примеры строк:

AntivirusOwner10.5.6.R01.Vr561
Antivirus2010Owner10.5.6.R01.Vr561
Antivirus_abc Movbsd 2008 abc r6 10.20.161.17
Antivirus_abc Movbsd .abc 4.5.6.7
Antivirus_abc Movbsd .mnc 4

Ожидаемое разделение:

AntivirusOwner                       10.5.6.R01.Vr561
Antivirus2010Owner                   10.5.6.R01.Vr561
Antivirus_abc Movbsd 2008 abc r6     10.20.161.1
Antivirus_abc Movbsd .abc            4.5.6.7
Antivirus_abc Movbsd .mnc            4

1 Ответ

2 голосов
/ 06 апреля 2020

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

$packageDescriptions = "AntivirusOwner10.5.6.R01.Vr561", "Antivirus2010Owner10.5.6.R01.Vr561", "Antivirus_IIS .Net10.12.14.16", "Antivirus_abc Movbsd 2008 abc r6 10.20.161.17", "Antivirus_abc Movbsd .abc 4.5.6.7", "Antivirus_abc Movbsd .mnc 4"
foreach ($packageDescription in $packageDescriptions) {
    if ($packageDescription -imatch "^(.*?)(\d+\.[\w\.]*|\d+)$") {
        Select-Object @{n='PackageName'; e={$Matches[1]}}, @{n='PackageVersion'; e={$Matches[2]}} -InputObject ''
    } else {
        Write-Warning "'$packageDescription' is not covered by this regex!"
    }
}

Вывод:

PackageName                       PackageVersion  
-----------                       --------------  
AntivirusOwner                    10.5.6.R01.Vr561
Antivirus2010Owner                10.5.6.R01.Vr561
Antivirus_IIS .Net                10.12.14.16     
Antivirus_abc Movbsd 2008 abc r6  10.20.161.17    
Antivirus_abc Movbsd .abc         4.5.6.7
Antivirus_abc Movbsd .mnc         4

Объяснение регулярного выражения "^(.*?)(\d+\.[\w\.]*|\d+)$":

У него есть две группы, инкапсулированные (). Сначала будет имя. Он совпадает по всем параметрам, но не совсем корректно (см. Добавление ?), поэтому группа 2 будет иметь приоритет. Группа 2 (версия) говорит, что она должна начинаться хотя бы с одной ди git, за которой следует точка, за которой следуют буквенные символы c и точки ИЛИ только несколько чистых цифр, чтобы поймать случай, когда версия состоит только из 4 (без точек).

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