--之前的文本已删除 - 我问错了问题!
咳咳....
我手头有一个变量$var = "\\unknowntext1\alwaysSame\unknowntext2"
我需要保留的是"\\unknowntext1"
--之前的文本已删除 - 我问错了问题!
咳咳....
我手头有一个变量$var = "\\unknowntext1\alwaysSame\unknowntext2"
我需要保留的是"\\unknowntext1"
$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'
"\\unknowntext1\alwaysSame\unknowntext2" -replace '(?<=\\\\unknowntext1).*', ''
编辑(最后)
如果您知道中间有某些已知的内容(`alwaysSame`),这可能有帮助:
"\\unknowntext1\alwaysSame\unknowntext2" -replace '(.*?)\\alwaysSame.*', '$1'
$var = "\\unknowntext1\alwaysSame\unknowntext2"
并且运行 $var.substring(0, $var.indexOf("\alwaysSame"));
,你会得到 \\unknowntext1
,QED。只是惊讶于其他答案非常复杂。 - ruffinfunction 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
System.StringComparison
格式。 ;^) - ruffin