如何在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")
至少,我希望看到匹配不区分大小写,并且还足够灵活,以便在可能的情况下处理某种程度的拼写错误。
据我所知,标准库没有提供这样的功能。是否有一个易于安装的模块可以实现这一目标?
答案 0 :(得分:3)
使用term"模糊"在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进行了测试。