PowerShell:从字符串末尾删除文本

8

--之前的文本已删除 - 我问错了问题!

咳咳....

我手头有一个变量$var = "\\unknowntext1\alwaysSame\unknowntext2"

我需要保留的是"\\unknowntext1"

3个回答

9
尝试使用正则表达式:
$foo = 'something_of_unknown' -replace 'something.*','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'

修改了答案,但现在看来,我必须再次编辑它 ;) - stej

6
我有的是 $var="\unknowntext1\alwaysSame\unknowntext2",我需要保留 "\unknowntext1"。不确定是否需要正则表达式。假设 "alwaysSame" 文本始终相同,因此按照 stej 答案周围的讨论,最简单的方法是: $var.substring(0, $var.indexOf("\alwaysSame"));

那怎么不是回答问题了呢?如果你有 $var = "\\unknowntext1\alwaysSame\unknowntext2" 并且运行 $var.substring(0, $var.indexOf("\alwaysSame"));,你会得到 \\unknowntext1QED。只是惊讶于其他答案非常复杂。 - ruffin
我注意到你们俩(Hashem和Lucas)的个人资料中都没有“PowerShell”标签。如果这让你感到困惑,那么需要知道的是PowerShell代码行始终会将其结果发出到“管道(pipeline)”中。我的回答中的语句将“返回(return)”OP请求的值;每条PowerShell代码行都像一个隐式函数,可以链接到另一个后续命令上。我可以理解这可能会让你感到困惑。我还编辑了答案,使我的意图对非PS用户更加清晰。 - ruffin

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

感谢 System.StringComparison 格式。 ;^) - ruffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接