如何在 PowerShell 中找到子字串的位置

  1. PowerShell 中的字串和子字串
  2. 使用 IndexOf 方法找到 PowerShell 中子字串的位置
  3. 使用 LastIndexOf 方法找到 PowerShell 中子字串的位置
  4. 使用 Select-String Cmdlet 找到 PowerShell 中子字串的位置
  5. 結論
如何在 PowerShell 中找到子字串的位置

在 PowerShell 腳本中,定位子字串在字串中的位置是一項基本要求,適用於各種任務,從文本處理到數據操作。PowerShell 提供多種方法和 cmdlet,以有效地找到字串中的子字串位置。

本文探討並詳細介紹各種實現此任務的技術。每種方法提供獨特的功能,滿足不同的場景和需求。

從使用簡單的字串操作方法到利用正則表達式的強大功能,這些方法為 PowerShell 腳本和命令中的子字串搜索提供了靈活性和通用性。

通過理解和利用這些方法,PowerShell 用戶可以有效地處理字串中的子字串搜索,使其能夠更高效地操作、提取或處理數據。

這本綜合指南旨在探索、解釋和展示在 PowerShell 中找到字串內子字串位置的各種方法的實現。

PowerShell 中的字串和子字串

字串是 PowerShell 中常用的數據類型。它是一系列字符,用於表示文本。

您可以通過使用單引號或雙引號來定義 PowerShell 中的字串。例如,"ABC"'ABC'

子字串是字串內的任何特定文本。如果 ABC 是一個字串,則 B 是它的子字串。

有時可能有一種情況,您需要找到字串的某個部分或文本文件中子字串的位置。IndexOf 方法和 LastIndexOf 主要報告 PowerShell 中指定子字串的索引位置。

使用 IndexOf 方法找到 PowerShell 中子字串的位置

PowerShell 中的 IndexOf 方法用於確定指定子字串在給定字串中的第一次出現的位置(索引)。此方法提供靈活性和易用性,允許用戶在字串中執行精確的子字串搜索。

語法:

$position = $string.IndexOf($substring)
  • $string:表示進行搜索的原始字串。
  • $substring:指定要在 $string 中找到的子字串。
  • $position:存儲 $substring$string 中第一次出現的位置(索引)。

在此方法中,您可以指定字串、字串對象中的起始搜索位置、要搜索的字符數以及要使用的搜索規則類型。

下面的示例找到給定字串中子字串 to 的第一次出現的位置。

"Welcome to PowerShell Tutorial".IndexOf("to")

輸出:

8

IndexOf 方法從零開始計算索引,輸出為 8

在以下代碼中,9 被指定為字串中的起始搜索位置。

"Welcome to PowerShell Tutorial".IndexOf("to", 9)

當您指定起始搜索位置時,該位置之前的字符會被忽略,因此它找到索引 9 之後子字串 to 的第一次出現位置。

輸出:

24

IndexOf 方法也考慮到子字串不在字串內的情況,此時返回 -1

例如,在給定字串中查找子字串 py 的搜索結果為 -1

"Welcome to PowerShell Tutorial".IndexOf("py")

輸出:

-1

高級用法:區分大小寫

PowerShell 中的 IndexOf 方法默認區分大小寫。然而,它可以通過 StringComparison 參數來修改為執行不區分大小寫的搜索。

$string = "PowerShell is versatile and powerful"
$substring = "VERSATILE"

$position = $string.IndexOf($substring, [System.StringComparison]::InvariantCultureIgnoreCase)
Write-Host "Position of substring '$substring' (case-insensitive) is $position"

輸出:

Position of substring 'VERSATILE' (case-insensitive) is 14

解釋:

  • $string:保存原始字串。
  • $substring:包含要查找的子字串(大小寫不同)。
  • $string.IndexOf($substring, [System.StringComparison]::InvariantCultureIgnoreCase):使用額外參數 [System.StringComparison]::InvariantCultureIgnoreCase 利用 IndexOf 方法執行不區分大小寫的搜索。
  • 得到的位置存儲在 $position 中,並使用 Write-Host 顯示。

使用 LastIndexOf 方法找到 PowerShell 中子字串的位置

您也可以使用 LastIndexOf 方法在 PowerShell 中查找子字串的索引。LastIndexOf 方法找到某個字符在字串中最後一次出現的位置。

PowerShell 中的 LastIndexOf 方法是識別給定字串中指定子字串最後一次出現的位置(索引)的有效手段。通過允許用戶從字串的末尾搜索,此方法使定位子字串的最後實例變得靈活。

語法:

$position = $string.LastIndexOf($substring)
  • $string:表示進行搜索的原始字串。
  • $substring:指定要在 $string 中找到的子字串。
  • $position:存儲 $substring$string 中最後一次出現的位置(索引)。

以下命令查找給定字串中子字串 to 最後一次出現的索引。

"Welcome to PowerShell Tutorial".LastIndexOf("to")

如示所示,輸出最後一次出現子字串 to 的位置。

輸出:

24

讓我們查看另一個示例,使用字串變量 $hello

$hello = "HelloHelloHello"

如果您使用 LastIndexOf 方法查找 $hello 中的子字串 He,它返回 10,因為這是 He 出現的最後一個索引。

$hello.LastIndexOf("He")

輸出:

10

如果未在字串中找到子字串,則 LastIndexOf 方法返回 -1

例如:

$hello.LastIndexOf("Hi")

輸出:

-1

高級用法:區分大小寫

IndexOf 方法類似,LastIndexOf 使用 StringComparison 參數支持不區分大小寫的搜索。

$string = "PowerShell is versatile and powerful"
$substring = "POWERFUL"

$position = $string.LastIndexOf($substring, [System.StringComparison]::InvariantCultureIgnoreCase)
Write-Host "Position of the last occurrence of substring '$substring' (case-insensitive) is $position"

輸出:

Position of the last occurrence of substring 'POWERFUL' (case-insensitive) is 28

解釋:

  • $string:包含原始字串。
  • $substring:保存要查找的子字串(大小寫不同)。
  • $string.LastIndexOf($substring, [System.StringComparison]::InvariantCultureIgnoreCase):利用額外參數 [System.StringComparison]::InvariantCultureIgnoreCase 使用 LastIndexOf 方法執行不區分大小寫的搜索。
  • 得到的位置存儲在 $position 中,並使用 Write-Host 顯示。

使用 Select-String Cmdlet 找到 PowerShell 中子字串的位置

PowerShell 中的 Select-String cmdlet 設計用於基於正則表達式(regex)或簡單字串進行字串搜索。它提供強大的模式匹配能力,使得用戶能夠在字串中查找特定子字串並提取相關信息。

語法:

$match = $string | Select-String -Pattern $substring -AllMatches
  • $string:表示進行搜索的原始字串。
  • $substring:指定要在 $string 中找到的子字串。
  • $match:存儲搜索操作的結果,包括子字串在字串中的位置(索引)。

Select-String cmdlet 在字串和文件中搜索文本。它類似於 UNIX 中的 grep

默認情況下,它在每行中找到第一個匹配並顯示所有包含該匹配的文本。

"HelloHelloHello" | Select-String "He"

輸出:

HelloHelloHello

Select-StringMatches 屬性找到指定字串和輸入字串或文件之間的匹配。匹配的子字串位置存儲在 Index 屬性中。

以下示例顯示如何使用 Matches.Index 屬性查找子字串在字串中的位置。

("HelloHelloHello" | Select-String "He").Matches.Index

它僅打印索引 0,因為 Select-String 在每行文本的第一個匹配後停止。

輸出:

0

您可以使用 -AllMatches 參數在每行中搜索多於一個匹配。

("HelloHelloHello" | Select-String "He" -AllMatches).Matches.Index

如示所示,它打印指定子字串的所有位置。

輸出:

0
5
10

以下示例在文本文件 test.txt 中查找指定子字串的所有位置。test.txt 包含字串 "Use the Select-String Cmdlet to Find the Position of Substring in PowerShell"

(Get-Content test.txt | Select-String "the" -AllMatches).Matches.Index

輸出:

4
37

此方法是查找字串中所有字符位置的最佳選擇。

如果在字串中找不到子字串,Select-String 將返回無匹配項($null)。

$string = "PowerShell is versatile and powerful"
$substring = "Python"

$match = $string | Select-String -Pattern $substring -AllMatches
if (-not $match) {
    Write-Host "Substring '$substring' not found in the string."
}
else {
    $position = $match.Matches[0].Index
    Write-Host "Position of substring '$substring' is $position"
}

輸出:

Substring 'Python' not found in the string.

解釋:

  • $string:包含原始字串。
  • $substring:表示要找到的子字串。
  • $string | Select-String -Pattern $substring -AllMatches:使用 Select-String$string 中搜索 $substring
  • 一個 if 條件檢查匹配結果是否為 $null-not $match),如果未找到子字串則顯示消息。

結論

定位子字串在字串中的位置對於 PowerShell 中的無數文本處理和數據操作任務至關重要。PowerShell 提供多種方法和 cmdlet,例如 IndexOfLastIndexOfSelect-String,以有效地完成此任務。

IndexOfLastIndexOf 方法提供了簡單的方法來找到字串中的子字串位置。這些方法提供功能以執行區分和不區分大小寫的搜索,使用戶能夠精確定位字串中的子字串位置。

另一方面,Select-String cmdlet 利用正則表達式的強大功能進行子字串搜索。該 cmdlet 提供廣泛的模式匹配能力,包括查找子字串的所有出現並提取其在字串中的位置。

理解和利用這些方法及 cmdlet 使 PowerShell 用戶能夠高效地操作和處理字串。通過適當使用這些工具,用戶可以處理各種子字串搜索場景,提取精確信息,並簡化其 PowerShell 腳本和命令以進行有效的數據操作。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

相關文章 - PowerShell String