我有一个简单的问题已经困扰了我几个小时。我基本上是从服务器获取以下格式的字符串。我需要做的就是删除最后一部分。例如:
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
最佳答案
您可以使用 -Replace
或 Split-Path
有效地删除以最终 \
开头的字符.
更换运算符(operator)解决方案:
$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了解更多信息。
关于powershell - 如何在正斜杠后删除地址的最后一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56467718/