我想构建一个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,并没有寻找一些快速方便的解决方案。
答案 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_
作为分隔符。