首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell多个StartsWith子句

Powershell多个StartsWith子句
EN

Stack Overflow用户
提问于 2015-07-18 23:13:32
回答 1查看 4.2K关注 0票数 2

我正在删除以'713‘、'714’等开头的文件中的行。我目前正在这样做:

代码语言:javascript
复制
$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')}

这感觉太草率了。如何改进这段代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-18 23:50:37

很少有东西能在这里起作用。首先,我们可以在数字序列和操作符-notin中使用数组表示法。我们需要提取第一个字符来进行简单的比较,这样才能工作。

代码语言:javascript
复制
$stripped = $stripped | Where{$_.substring(0,3) -notin (713..717)}

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

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

代码语言:javascript
复制
$stripped = $stripped | where{$_ -notmatch "^71[3-7]"}

让我们说没有一个模式,你只是不想在开始的一系列字符串中的任何一个。

代码语言:javascript
复制
$dontMatchMe = "^(" + ("Test","Bagel","123" -join "|") + ")"
$stripped = $stripped | where{$_ -notmatch $dontMatchMe}

插入符号^是字符串开头的正则表达式锚。因此,我们构建了一个不需要的字符串数组,并使用管道字符将它们连接起来,并将其括在括号中。在我的例子中应该是这样的:

代码语言:javascript
复制
PS C:\Users\Cameron> $dontMatchMe
^(Test|Bagel|123)

您需要小心处理字符串,以防它们包含正则表达式控制字符。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31496467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档