计数相等的正则表达式匹配

Count equal Regex matches

我目前正在寻找一种方法来计算相等的正则表达式匹配并将它们输出为 table 或类似的东西。

我的正则表达式如下所示:

$regex = "\A[[]{1}[0-9]{2}[.]{1}[0-9]{2}[.]{1}[0-9]{2}[,]{1}\s[0-9]{2}[:]{1}"

我的 Powershell 代码目前看起来像这样,并且只输出脚本找到的所有匹配项。

((Select-String $content -Pattern $regex -AllMatches).Matches).value

脚本给我的输出如下所示(缩短):

[02.12.21, 11:
[02.12.21, 11:
[02.12.21, 11:
[02.12.21, 13:
[02.12.21, 13:
[02.12.21, 13:
[02.12.21, 13:
[02.12.21, 13:
[02.12.21, 13:
[02.12.21, 13:

我想输出类似这样的东西:

[02.12.21, 11: (3 times)
[02.12.21, 13: (7 times)

有人可以帮我吗?

提前致谢!

如评论中所述,您可以使用 Group-Object:

$matchValues = @(
    '[02.12.21, 11:'
    '[02.12.21, 11:'
    '[02.12.21, 11:'
    '[02.12.21, 13:'
    '[02.12.21, 13:'
    '[02.12.21, 13:'
    '[02.12.21, 13:'
    '[02.12.21, 13:'
    '[02.12.21, 13:'
    '[02.12.21, 13:'
)

$matchValues | Group-Object | ForEach-Object { '{0} ({1} times)' -f $_.Name, $_.Count }

输出:

[02.12.21, 11: (3 times)
[02.12.21, 13: (7 times)

每个组对象的 Name 属性 包含唯一值,而其 Count 属性 为您提供该值的实例数。

最后,您可以使用 format operator -f 来生成所需的输出。