我正在删除以'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')}这感觉太草率了。如何改进这段代码?
发布于 2015-07-18 23:50:37
很少有东西能在这里起作用。首先,我们可以在数字序列和操作符-notin中使用数组表示法。我们需要提取第一个字符来进行简单的比较,这样才能工作。
$stripped = $stripped | Where{$_.substring(0,3) -notin (713..717)}因此,如果前3个字符在数字范围内,则跳过它们。
对于其他解决方案,我们可以使用regex,因为在您的数字中有一个明显的模式。您可以使用一个模式来不匹配字符串开头的713-717中的数字。
$stripped = $stripped | where{$_ -notmatch "^71[3-7]"}让我们说没有一个模式,你只是不想在开始的一系列字符串中的任何一个。
$dontMatchMe = "^(" + ("Test","Bagel","123" -join "|") + ")"
$stripped = $stripped | where{$_ -notmatch $dontMatchMe}插入符号^是字符串开头的正则表达式锚。因此,我们构建了一个不需要的字符串数组,并使用管道字符将它们连接起来,并将其括在括号中。在我的例子中应该是这样的:
PS C:\Users\Cameron> $dontMatchMe
^(Test|Bagel|123)您需要小心处理字符串,以防它们包含正则表达式控制字符。
如果正则表达式对您来说是新的,那么在我开始时,我发现RexEgg是一个很好的参考。
https://stackoverflow.com/questions/31496467
复制相似问题