- 删除早期文本 - 我问错了问题!
啊哈....
我拥有的是什么 $var = "\\unknowntext1\alwaysSame\unknowntext2"
我只需要保留 "\\unknowntext1"
尝试正则表达式:
$foo = 'something_of_unknown' -replace 'something.*','something'
Run Code Online (Sandbox Code Playgroud)
或者,如果你只知道'某事',那么,例如
'something_of_unknown' -replace '(some[^_]*).*','$1'
'some_of_unknown' -replace '(some[^_]*).*','$1'
'somewhatever_of_unknown' -replace '(some[^_]*).*','$1'
Run Code Online (Sandbox Code Playgroud)
的$1
是参照组中括号(的(some[^_]*)
一部分).
编辑(更改后的问题):
如果使用正则表达式,则需要转义特殊字符:
"\\unknowntext1\alwaysSame\unknowntext2" -replace '\\\\unknowntext1.*', '\\unknowntext1'
Run Code Online (Sandbox Code Playgroud)
或(另一个正则表达式魔术)使用这样的lookbehind:
"\\unknowntext1\alwaysSame\unknowntext2" -replace '(?<=\\\\unknowntext1).*', ''
Run Code Online (Sandbox Code Playgroud)
(这是:取任何东西(.*
),但必须\\unknowntext1
在它之前('(?<=\\\\unknowntext1)
)并用空字符串替换它.
编辑(最后)
如果你知道中间有一些已知的东西alwaysSame
,那么这可能会有所帮助:
"\\unknowntext1\alwaysSame\unknowntext2" -replace '(.*?)\\alwaysSame.*', '$1'
Run Code Online (Sandbox Code Playgroud)
我所拥有的是 $var = "\unknowntext1\alwaysSame\unknowntext2"
我只需要保留“\unknowntext1”
不确定这是否需要正则表达式。假设alwaysSame
字面上总是相同的,正如围绕 stej 答案的讨论所表明的那样,到目前为止,实现这一点的最直接的方法似乎是:
$var.substring(0, $var.indexOf("\alwaysSame"));
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24101 次 |
最近记录: |