PowerShell中的模糊字符串匹配

问题描述 投票:-1回答:1

如何在PowerShell脚本中进行模糊字符串匹配?

我有不同的名称来自不同来源的人,并将它们存储在一个数组中。当我添加一个新名称时,我喜欢将名称与现有名称进行比较,如果它们模糊不清,我想将它们视为相同。例如,数据集为:

@("George Herbert Walker Bush",
  "Barbara Pierce Bush",
  "George Walker Bush",
  "John Ellis (Jeb) Bush"  )

我希望看到来自给定输入的以下输出:

"Barbara Bush" -> @("Barbara Pierce Bush")
"George Takei" -> @("")
"George Bush"  -> @("George Herbert Walker Bush","George Walker Bush")

至少,我喜欢看到匹配不区分大小写,并且还足够灵活,以便在可能的情况下处理某种程度的拼写错误。

据我所知,标准库不提供这样的功能。是否有一个易于安装的模块可以实现这一目标?

powershell fuzzy-search
1个回答
3
投票

PowerShell Gallery搜索术语“模糊”,我找到了这个包:Communary.PASM

它可以简单地安装:

PS> Install-Package Communary.PASM                                                                                                     

该项目在GitHub中找到了here。我只是看看this examples file作为参考。

这是我的例子:

$colors = @("Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Sky Blue" )

PS> $colors | Select-FuzzyString Red

Score Result
----- ------   
  300 Red

这是一个完美的匹配,每个角色最多100分。

PS> $colors | Select-FuzzyString gren

Score Result
----- ------
  295 Green 

它容忍一些缺少的角色。

PS> $colors | Select-FuzzyString blue

Score Result  
----- ------     
  400 Blue       
  376 Sky Blue

可以返回具有不同分数的多个值。

PS> $colors | Select-FuzzyString vioret

# No output

但它不能容忍一点拼写错误。然后我也尝试了Select-ApproximateString

PS> $colors | Select-ApproximateString vioret
Violet

这有不同的API,它只返回一个匹配或没有。当Select-FuzzyString这样做时,它也可能不会返回任何东西。

这是在MacOS和Communary.PASM 1.0.43上使用PowerShell Core v6.0.0-beta.9进行测试的。

© www.soinside.com 2019 - 2024. All rights reserved.