PowerShell 中 str.Substring 的等价物是什么?

问题描述 投票:0回答:1

我正在制作一个简单的编译工具作为练习PS的一种方式,我需要将字符串的一部分提取到另一个变量中。例如:

[string]$Filepath = "C:/Users/xxx/Projects/file.cpp"
(我需要字符串的最后一部分)

由于我是 PS 的初学者,有没有一种方法可以在不使用正则表达式的情况下做到这一点?

我尝试了

-match
的东西,但我不是在寻找任何特定的值,我只需要最后一个“/”之后的所有内容。

powershell substring
1个回答
0
投票

回答您帖子的标题中包含的问题:

PowerShell 中 str.Substring 的等价物是什么?

PowerShell 提供对所有 .NET API 的几乎无限制的访问,因此您可以直接调用

System.String
类型的
.Substring()
;例如:

# -> 'file.cpp'
"C:/Users/xxx/Projects/file.cpp".Substring(22)

我只需要最后一个“/”之后的所有内容。

类似地,您可以使用 .NET

.Split()
方法按给定的逐字字符拆分字符串,并将其与 PowerShell 的增强索引相结合,以允许您使用 从末尾引用元素。负索引,特别是 [-1]
 引用数组的 
last 元素(以及实现 System.Collections.IList
 接口的其他 .NET 类型)。

# -> 'file.cpp' "C:/Users/xxx/Projects/file.cpp".Split('/')[-1]


PowerShell 本身提供了

-split

 运算符,其 RHS(分割标准)默认被解释为 regex(与 /
 没有区别):

# -> 'file.cpp' ("C:/Users/xxx/Projects/file.cpp" -split '/')[-1]
请参阅

这个答案,了解为什么考虑到所涉及的权衡,使用 -split

 而不是 
.Split()
 通常更可取。


另一种选择是使用 PowerShell 的基于正则表达式的

-replace

 运算符;下面使用正则表达式来匹配 last /
 字符之前的所有内容,并且 - 由于未指定 
替换操作数 - 有效地 删除 匹配的内容,只留下 after 最后一个 /
 后面的内容:

# -> 'file.cpp' "C:/Users/xxx/Projects/file.cpp" -replace '^.*/'


最后,

只有使用分隔符 /

\\
 时,才可以使用 
Split-Path
-Leaf
 参数,利用 PowerShell 可以识别 
\
/
 
可互换的事实作为路径(目录)分隔符:

# -> 'file.cpp' Split-Path -Leaf "C:/Users/xxx/Projects/file.cpp"
    
© www.soinside.com 2019 - 2024. All rights reserved.