Powershell Multiple StartsWith子句

时间:2015-07-18 23:13:32

标签: powershell powershell-v4.0

我正在从以'713','714'等开头的文件中删除行。我现在这样做:

$stripped = $stripped | where{-Not $_.StartsWith('713')}
$stripped = $stripped | where{-Not $_.StartsWith('714')}
$stripped = $stripped | where{-Not $_.StartsWith('715')}
$stripped = $stripped | where{-Not $_.StartsWith('716')}
$stripped = $stripped | where{-Not $_.StartsWith('717')}

这感觉超级邋..如何改进此代码?

1 个答案:

答案 0 :(得分:5)

这里几乎没有什么可行的。首先,我们可以使用数字序列和数字序列以及运算符availableChildren。我们需要提取第一个字符进行简单的比较才能使其正常工作。

-notin

因此,如果前3个字符在数字范围内,则跳过它们。

对于其他解决方案,我们可以使用正则表达式,因为您的数字中有一个明显的模式。您可以使用模式来匹配字符串开头的713 - 717中的数字。

$stripped = $stripped | Where{$_.substring(0,3) -notin (713..717)}

我们说没有一种模式,你只是一开始就不想要任何一系列字符串。

$stripped = $stripped | where{$_ -notmatch "^71[3-7]"}

插入符号$dontMatchMe = "^(" + ("Test","Bagel","123" -join "|") + ")" $stripped = $stripped | where{$_ -notmatch $dontMatchMe} 是字符串开头的正则表达式锚点。因此,我们构建了一个我们不想要的字符串数组,并将它们与管道字符连接起来并将其括在括号中。在我的例子中它看起来像这样:

^

如果字符串包含正则表达式控制字符,则需要小心。

如果正则表达式对你来说是新手,我发现RexEgg在我开始时是一个很好的参考。