对包含给定短语的字符串应用过滤器,并返回在

时间:2018-12-19 14:48:47

标签: powershell

我想构建一个PowerShell脚本,该脚本返回在给定字符串出现之后发生的所有事情。我想针对单个字符串而不是集合运行命令。

例如我想返回短语“ _blah_”之后的所有内容

_blah_v2.3 
_blah_bar_blah_v56
_blah_v42 
foo

结果:

v2.3 
bar_blah_v56
v42 

正则表达式对于这样的操作可能太重了,因此正在寻找其他替代解决方案 我已经尝试过了:

$Foo = "blah_v1.1"
$FooVersion = ($Foo -split '_blah_', 2)[1]

Write-Host $Foo
Write-Host $FooVersion

,但仅适用于单个字符而不是字符串。我不太熟练使用PowerShell,并没有寻找一些快速方便的解决方案。

3 个答案:

答案 0 :(得分:9)

  

正则表达式对于这样的操作可能太重了

不,不会。

"_blah_v2.3" -replace '^.*?_blah_'

答案 1 :(得分:1)

因此带有给定短语的字符串与您的previous question不同,但其余部分并没有太大区别。

使用类似

$FooVersion = $Foo -replace '_?blah_(.*)', '$1'

$FooVersion = ($Foo -split '_?blah_', 2)[-1]

if ($Foo -match '_?blah_(.*)') { $FooVersion = $Matches[1] } else { $FooVersion = $Foo }

会这样做。

还请阅读mklement0给出的说明。这肯定会在将来的情况下有所帮助。

答案 2 :(得分:0)

除非性能至关重要(非常罕见),否则regex很好。我会在后面使用积极的表情。请参见以下示例:

$test = '_blah_v2.3 ','_blah_bar_blah_v56','blah_v42 ','foo'
($test | Select-String '(?<=blah_).*').Matches.Value

请注意,我使用blah_作为分隔符。