HOWTO · PowerShell

如何从字符串中提取 PowerShell 子字符串

您可以在 Windows PowerShell 中从字符串中提取子字符串

本页内容

本文说明了如何在 PowerShell 中从字符串中提取子字符串。子字符串只是字符串的一部分。

我们可以使用 Substring() 和 split() 方法在 PowerShell 中创建子字符串。比如,如果我们有字符串 Delftstack.com,Delftstack 是一个子字符串,而 com 是另一个。

本文将讨论 Substring() 方法。

使用 Substring() 方法提取 PowerShell 子字符串

让我们先看一下 Substring() 方法的语法。

string.Substring(int startIndex, int length)

语法中的 int 标记 startIndex 和 length 为索引数字。startIndex 表示我们想要提取的子字符串的第一个字符,而 length 是我们想要从字符串中提取的字符数。

我们使用 IndexOf 方法来确定子字符串的 startIndex 和 length。

我们通过将 IndexOf 子字符串的结果值加 1 来确定 startIndex。让我们看一个例子。

假设 ned.delftstack.com 是我们的字符串,那么字母 n 在我们字符串中的索引位置是什么?我们可以通过运行下面的命令来确定这个位置:

"ned.delftstack.com".IndexOf('n')

结果是 0。这是因为 IndexOf 方法从左到右搜索字符串的第一次出现,并且总是从 0 开始。

因此,如果我们希望提取从字母 n 开始的子字符串,我们的 startIndex 将是 0。

我们还可以使用 LastIndexOf 来找到字符串最后一次出现的位置。比如,字母 d 的最后一次出现位置是:

"ned.delftstack.com".LastIndexOf('d')

这些基本信息将使您能够在 PowerShell 中处理字符串。

在字符串左侧提取 PowerShell 子字符串

让我们将上述信息付诸实践。

假设我们想从 ned.delftstack.com 中提取子字符串 ned。我们该怎么做?

我们将首先将字符串保存在一个名为 ourstrng 的变量中。

$ourstrng = "ned.delftstack.com"

根据 Substring() 方法的语法,我们的命令将是:

$ourstrng.Substring(0, 3)

这将返回 ned,因为我们的 startIndex 是 0,length 是 3 个字符。如果我们的目标是从我们的字符串中提取 delftstack 呢?

第一步是确定子字符串的 startIndex。在这种情况下,我们将使用第一个句号,它是分隔符。

$ourstrng.IndexOf(".")

结果将是 3。但是如果您能回想起来,我们为字符串的第一个字符加 1;因此,我们的 startIndex 将是 4。

长度将是我们希望子字符串拥有的字符数;我们将从 1 开始计数。子字符串 delftstack 有 10 个字符。

$ourstrng.Substring(4, 10)

这将返回 delftstack。

在指定字符之前和之后提取 PowerShell 子字符串

假设我们想从我们的字符串中提取 ned 和 delftstack.com。我们该怎么做?

首先,我们需要确定分隔符的位置,第一个 .。下面的命令将分隔符保存在一个名为 $sepchar 的变量中。

$sepchar = $ourstrng.IndexOf(".")

要提取我们的子字符串,我们将运行下面的命令:

$ourstrng.Substring(0, $sepchar)

这将提取第一部分,即 ned。对于另一个子字符串,我们将运行:

$ourstrng.Substring($sepchar + 1)

这将返回 deftstack.com。

在两个字符之间提取 PowerShell 子字符串

如果我们的字符串是 ned.delftstack.com,我们的子字符串将是 delftstack,因为它位于第一个和第二个句号之间。这样的脚本将需要三个命令。

第一个命令将确定我们第一个句号 (.) 的位置并将其保存到变量 firstsep 中。

$firstsep = $ourstrng.IndexOf(".")

第二个命令将使用 LastIndexOf 方法确定我们的第二个句号的位置,并将其保存到变量 lastrep 中。

$lastrep = $ourstrng.LastIndexOf(".")

最后一个命令将从我们的字符串中提取子字符串 delftstack。

$ourstrng.Substring($firstsep + 1, $lastrep - 4)

总之,您可以在 PowerShell 分隔符之前、之后和之间提取字符串中的子字符串。正如我们上面所看到的,Substring() 方法非常实用。