如何删除斜杠后地址的最后一部分?

时间:2019-06-05 20:41:16

标签: powershell

我有一个简单的问题,已经困扰了我几个小时。我基本上是从服务器获取以下格式的字符串。我需要做的就是删除最后一部分。例如:

AAA \ BBB \ CCC \ DDD

结果将是:

AAA \ BBB \ CCC

另一个例子:

AAA \ BBB \ CCC \ DDD \ EEE

结果将是:

AAA \ BBB \ CCC \ DDD

你能帮我吗?谢谢。

$host_attr = $host_attr.replace('`n', '')
write-host "host_attr: " $host_attr
$host_attr = $host_attr.ToCharArray()
[Array]::Reverse($host_attr) 
$host_attr = -join $host_attr
$domanNameDump, $host_attr  = $host_attr.split('\\', 3) 
$host_attr = $host_attr.ToCharArray()
[Array]::Reverse($host_attr)
$host_attr = -join $host_attr
write-host "host_attr: " $host_attr

1 个答案:

答案 0 :(得分:3)

您可以使用-ReplaceSplit-Path有效地删除以最后一个\开头的字符。

替换操作员解决方案:

$s = "AAA\BBB\CCC\DDD\EEE"
$s -Replace "(.*)\\.*",'$1'

分割路径解决方案:

$s = "AAA\BBB\CCC\DDD\EEE"
Split-Path -Path $s

说明:

-Replace运算符使用正则表达式模式查找匹配项,并替换为指定的任何值。在这种情况下,我们使用$1,因为它代表了正则表达式(.*)中的捕获组1((.*)\\.*)。 .*是所有字符的贪婪匹配。 \需要在正则表达式中进行转义,这就是模式包含\\的原因。最后的.*仅匹配最后一个\之后的其余字符,以便替换它们。 (.*)\\的顺序很重要,因此贪心匹配将在找到的最后一个\字符处停止。有关更多信息,请参见Replacement Operator

由于没有可选参数的Split-Path会剥离从最后一个\开始的所有内容,因此可以将其用于此特定方案。有关更多信息,请参见Split-Path