【问题标题】:How do i remove the last part of an address after the forward slash?如何在正斜杠后删除地址的最后一部分?
【发布时间】:2019-10-21 09:22:50
【问题描述】:

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

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

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以使用-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 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 2017-03-19
      • 2019-09-19
      • 2019-02-06
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      相关资源
      最近更新 更多