- 删除了之前的文字 - 我问了错误的问题!
...啊哈
我所拥有的是$var = "\\unknowntext1\alwaysSame\unknowntext2"
我只需保留"\\unknowntext1"
答案 0 :(得分:6)
尝试正则表达式:
$foo = 'something_of_unknown' -replace 'something.*','something'
或者如果你只知道'某事'的部分内容,那么就是
'something_of_unknown' -replace '(some[^_]*).*','$1'
'some_of_unknown' -replace '(some[^_]*).*','$1'
'somewhatever_of_unknown' -replace '(some[^_]*).*','$1'
$1
是对括号内的组的引用((some[^_]*)
部分)。
修改(更改后的问题):
如果您使用正则表达式,则需要转义特殊字符:
"\\unknowntext1\alwaysSame\unknowntext2" -replace '\\\\unknowntext1.*', '\\unknowntext1'
或(另一个正则表达式魔法)使用这样的lookbehind:
"\\unknowntext1\alwaysSame\unknowntext2" -replace '(?<=\\\\unknowntext1).*', ''
(即:取任何内容(.*
),但前面必须有\\unknowntext1
('(?<=\\\\unknowntext1)
)并将其替换为空字符串。
修改(最后)
如果你知道中间有一些已知的东西(alwaysSame
),这可能会有所帮助:
"\\unknowntext1\alwaysSame\unknowntext2" -replace '(.*?)\\alwaysSame.*', '$1'
答案 1 :(得分:5)
function Remove-TextAfter {
param (
[Parameter(Mandatory=$true)]
$string,
[Parameter(Mandatory=$true)]
$value,
[Switch]$Insensitive
)
$comparison = [System.StringComparison]"Ordinal"
if($Insensitive) {
$comparison = [System.StringComparison]"OrdinalIgnoreCase"
}
$position = $string.IndexOf($value, $comparison)
if($position -ge 0) {
$string.Substring(0, $position + $value.Length)
}
}
Remove-TextAfter "something_of_unknown" "SoMeThInG" -Insensitive
答案 2 :(得分:3)
我所拥有的是$ var =&#34; \ unknowntext1 \ alwaysSame \ unknowntext2&#34;
我只需要保留&#34; \ unknowntext1&#34;
不确定这需要正则表达式。假设alwaysSame
实际上始终是相同的,正如围绕stej的回答所暗示的那样,到目前为止,最直接的方法似乎是:
$var.substring(0, $var.indexOf("\alwaysSame"));