如何在位置x后的PowerShell中找到子字符串的位置?

时间:2015-07-27 21:29:02

标签: powershell

有一种简单的方法吗?我找不到任何东西。我是否有义务逐个字符地扫描?

我不希望字符串作为返回,而是位置所以不建议使用SubString。

2 个答案:

答案 0 :(得分:10)

是的,你可以。 IndexOf()方法有an overload that takes a startIndex参数:

PS C:\> "WordsWordsWords".IndexOf("Words")
0
PS C:\> "WordsWordsWords".IndexOf("Words", 2)
5

在第二个例子中,我们寻找子串的索引" Words"在字符索引2之后开始。

答案 1 :(得分:3)

关于the answer from Mathias R. Jessen的注意事项:

String.IndexOf method实际上是字符串对象的.NET方法。这是因为默认情况下它区分大小写(这对PowerShell来说并不常见):

PS C:\> "WordsWordsWords".IndexOf("words")
-1

您也可以通过将StringComparison设置为CurrentCultureIgnoreCase

来解决此问题
PS C:\> "WordsWordsWords".IndexOf("words", [System.StringComparison]::CurrentCultureIgnoreCase)
0

但您也可以考虑Select-String cmdlet,它为您提供了更多可能性,包括regular expressions

PS C:\> ("Words words words" | Select-String "words").Matches.Index
0
PS C:\> ("Words words words" | Select-String "words" -AllMatches).Matches.Index
0
6
12
PS C:\> ("Words words words" | Select-String "\w+" -AllMatches).Matches.Index
0
6
12