我有一个简单的问题,已经困扰了我几个小时。我基本上是从服务器获取以下格式的字符串。我需要做的就是删除最后一部分。例如:
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
答案 0 :(得分:3)
您可以使用-Replace
或Split-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。