gpt4 book ai didi

regex - 如何按 groups 数组的值对 PowerShell 中的正则表达式匹配进行排序

转载 作者:行者123 更新时间:2023-12-02 23:07:46 25 4
gpt4 key购买 nike

我有一个字符串数组,每个字符串都包含一个代表冲刺(scrum)编号的数字。现在,我想在 Powershell 中使用正则表达式按 sprint 编号对数组进行排序。

数组示例

  • 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'是一个只读属性。”。或者有没有更好的方法来达到我想要的排序结果?

为了简单起见,我在这里使用了一个字符串数组。但在实际场景中,它是一个包含自定义对象和一堆数据的数组。该数组应该在我的正则表达式管道之后排序。

提前致谢!

最佳答案

您需要对字符串的数字部分进行排序,首先转换为 [int],否则排序仍将是字母数字:

# define the array
$a = "a.sprint-100","a.sprint-99","a.sprint-49","a.sprint-98"
# sort on the numeric part of the strings, converted to [int]
$a | Sort-Object {[int]($_ -split '-')[-1]}

结果:

a.sprint-49
a.sprint-98
a.sprint-99
a.sprint-100

关于regex - 如何按 groups 数组的值对 PowerShell 中的正则表达式匹配进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56360070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com