gpt4 book ai didi

powershell - 使用 Powershell 中的另一个列表在列表中搜索部分匹配项

转载 作者:行者123 更新时间:2023-12-03 16:45:09 25 4
gpt4 key购买 nike

Powershell 中的“-contains”运算符需要完全匹配(无通配符)。 “-match”运算符允许通配符和部分匹配。如果我想对可能的匹配项列表执行部分/通配符匹配,我应该怎么做?

例如:

$my_match_list = @("Going","Coming","Leaving","Entering")
$my_strings_list = @("Going home", "Coming over", "Leaving the house", "Entering a competition")

“Going”将匹配“Going home”,但 $my_strings_list 不会包含“Going”现在我通过循环解决了这个问题,但它看起来不应该是最好的方法:

foreach($i in $my_strings_list){
foreach($y in $my_match_list){
if($i -match $y){
do.something
}
}
}

我应该如何处理这个问题?对于特定任务,我实际上是在一个大型 AD 数据库中查询所有与多个描述中的一个相匹配的用户。我希望它看起来尽可能整洁。我有类似的东西:

$myVar = get-aduser -filter {blah -ne blah} -properties description | ?{$_.description -match "blah1" -or (etcetcetc)

但它变成了过滤器字符串中可能匹配项的长得可怕的列表。因此,我将所有内容都抓取到一个变量中,并处理出我想要的实际匹配项。但看起来我应该能够用更少的行来完成任务。也许只有 1 个长的正则表达式字符串并将其放入过滤器?

|?{$_.description -match "something|something|something|something"

?

编辑:我猜正则表达式可能是最短的:

$my_match_list = "going|coming|leaving|entering"
foreach($i in $my_strings_list){if($i -match $my_match_list){do.something}}

所以:

get-aduser -filter {blah -ne blah} -properties description | ?{$_.description -match $my_match_list}

我更喜欢类似“get-blah blah | ?{$_.description in $my_match_list} 的东西,因为将内容添加到列表比将它们添加到正则表达式更容易。

最佳答案

$my_match_list = @("Going","Coming","Leaving","Entering")
$my_strings_list = @("Going home", "Coming over", "Leaving the house", "Entering a competition")

[regex]$Match_regex = ‘(‘ + (($my_match_list |foreach {[regex]::escape($_)}) –join “|”) + ‘)’

$my_strings_list -match $Match_regex

Going home
Coming over
Leaving the house
Entering a competition

http://blogs.technet.com/b/heyscriptingguy/archive/2011/02/18/speed-up-array-comparisons-in-powershell-with-a-runtime-regex.aspx

关于powershell - 使用 Powershell 中的另一个列表在列表中搜索部分匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24875987/

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