У меня есть массив строк, и каждая строка содержит число, которое представляет номер спринта (scrum). Теперь я хочу отсортировать массив по номеру спринта с помощью регулярных выражений в Powershell.
Пример массива
- a.sprint-100
- a.sprint-99
- a.sprint-49
- a.sprint-98
# define the array
$a = @("a.sprint-100","a.sprint-99","a.sprint-49","a.sprint-98")
# escape hard defined string in regex
$escapedString = [regex]::escape(".sprint-")
# create regex which matches <AnyCharacter>.sprint-<SprintNumber>
[regex]$regex = "(.+)$escapedString([0-9]{2,3})"
# process the regex on all strings and print out the sprint number
$a | %{[System.Text.RegularExpressions.Regex]::Match($_, $regex)} | %{$_.Groups[2].value}
# output: 100 99 49 98
# but my sort logic doesn't work
$a | %{[System.Text.RegularExpressions.Regex]::Match($_, $regex)} | Sort-Object -Property {$_.Groups[2].value} -Descending | %{$_.Groups[2].value}
# output: 99 98 49 100
Я сортирую по строке. Таким образом, это может быть главной проблемой.
У кого-нибудь есть идея разобрать значение совпадения в int?
Если я попытаюсь это сделать, я получу 'value' is a ReadOnly property."
.
Или есть лучший способ получить желаемый результат сортировки?
Для упрощения я использовал здесь строковый массив. Но в реальном сценарии это массив, включающий пользовательские объекты с кучей данных. Этот массив должен быть отсортирован после моего канала регулярных выражений.
Заранее спасибо!