我正在从以'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')}
这感觉超级邋..如何改进此代码?
答案 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在我开始时是一个很好的参考。