PowerShell中的模糊字符串匹配
如何在PowerShell脚本中进行模糊字符串匹配 我从不同的来源收集了不同的人名集,并将它们存储在一个数组中。当我添加一个新的名字时,我喜欢把名字和现有的名字进行比较,如果它们模糊地匹配,我会认为它们是相同的。例如,数据集为:PowerShell中的模糊字符串匹配,powershell,fuzzy-search,Powershell,Fuzzy Search,如何在PowerShell脚本中进行模糊字符串匹配 我从不同的来源收集了不同的人名集,并将它们存储在一个数组中。当我添加一个新的名字时,我喜欢把名字和现有的名字进行比较,如果它们模糊地匹配,我会认为它们是相同的。例如,数据集为: @("George Herbert Walker Bush", "Barbara Pierce Bush", "George Walker Bush", "John Ellis (Jeb) Bush" ) 我希望看到给定输入的以下输出: "Barbara
@("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")
至少,我希望看到匹配是不区分大小写的,如果可能的话,还可以灵活地处理一定程度的拼写错误
据我所知,标准库不提供此类功能。是否有一个易于安装的模块可以实现这一点?使用术语“fuzzy”搜索,我发现这个包:
它可以简单地安装在以下位置:
PS> Install-Package Communary.PASM
该项目位于GitHub中。我只是参考一下
以下是我的例子:
$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 approximatesetring
:
PS> $colors | Select-ApproximateString vioret
Violet
它有不同的API,只返回一个匹配项或不返回任何内容。当选择FuzzyString
时,它也可能不会返回任何内容
这是在MacOS和Communiary.PASM 1.0.43上使用PowerShell Core v6.0.0-beta.9进行测试的。使用术语“fuzzy”搜索时,我发现此软件包:
它可以简单地安装在以下位置:
PS> Install-Package Communary.PASM
该项目位于GitHub中。我只是参考一下
以下是我的例子:
$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 approximatesetring
:
PS> $colors | Select-ApproximateString vioret
Violet
它有不同的API,只返回一个匹配项或不返回任何内容。当选择FuzzyString
时,它也可能不会返回任何内容
这是在MacOS和Communiary.PASM 1.0.43上使用PowerShell Core v6.0.0-beta.9进行测试的。如果它只是在其他字符串中匹配字符串,。或者。如果它只是在其他字符串中匹配字符串,。或者。