当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 PowerShell 中拆分字符串?

作者:精品下载站 日期:2024-12-14 05:12:42 浏览:12 分类:玩电脑

如何在 PowerShell 中拆分字符串?


我的一位客户最近要求我将字符串拆分为更小的子字符串,因此我建议使用 PowerShell。本教程将通过示例探讨在 PowerShell 中拆分字符串的各种方法。

要在 PowerShell 中拆分字符串,可以使用 -split 运算符或 .NET String 类中的 .Split() 方法。 -split 运算符很简单,并且支持复杂分割的正则表达式,例如 $string -split “\s+” 在空格上分割。 .Split() 方法允许使用多个分隔符并限制子字符串的数量,例如 $string.Split(“,”, 2) 以逗号分隔并仅返回两个子字符串。

在 PowerShell 中分割字符串的方法有多种。

使用 PowerShell 中的拆分运算符拆分字符串

首先,让我们看看如何使用 -split 运算符在 PowerShell 中拆分字符串。该运算符根据分隔符将字符串拆分为子字符串数组。

这是一个基本示例。假设我们有一个包含用逗号分隔的名称列表的字符串,如下所示:

$string = "John Doe,Jane Smith,Michael Johnson"
$names = $string -split ","

在此示例中,使用逗号 , 作为分隔符将字符串 $string 拆分为数组 $names。生成的数组将包含以下元素:

  • 约翰·多伊
  • 简·史密斯
  • 迈克尔·约翰逊

您可以在下面的屏幕截图中看到我使用 VS code 执行 PowerShell 脚本后的输出。

[玩转系统] 如何在 PowerShell 中拆分字符串?

拆分运算符的示例

现在,让我向您展示如何在 PowerShell 中使用拆分运算符拆分字符串的几个示例。

1. 多个字符的分割

您还可以根据多个字符拆分字符串。例如,如果名称由逗号和空格分隔,则可以使用以下语法:

$string = "John Doe, Jane Smith, Michael Johnson"
$names = $string -split ", "

2. 使用正则表达式

-split 运算符支持正则表达式,允许更复杂的拆分规则。例如,如果您想在任何空白字符上拆分字符串,可以使用以下命令:

$string = "John Doe Jane Smith Michael Johnson"
$names = $string -split "\s+"

在这种情况下,正则表达式 \s+ 匹配一个或多个空白字符。

3.使用PowerShell按分隔符分割字符串

PowerShell 中的-split 运算符可用于根据分隔符将字符串拆分为数组。

假设您有一个字符串,其中包含一串用分号分隔的地址:

$addresses = "123 Main St; 456 Oak St; 789 Pine St; 101 Maple Ave"

将此字符串拆分为以分号作为分隔符的单独地址:

$splitAddresses = $addresses -split "; "
$splitAddresses

输出将是:

123 Main St
456 Oak St
789 Pine St
101 Maple Ave

4.在PowerShell中用多个分隔符分割字符串

以下示例展示了如何在 PowerShell 中使用 -split 运算符将字符串拆分为多个分隔符。

假设您有一个字符串,其中包含由逗号和分号分隔的名称列表:

$names = "John Doe, Jane Smith; Robert Johnson, Emily Davis; Michael Brown"

要使用 -split 运算符按逗号和分号拆分此字符串,您可以使用与逗号或分号匹配的正则表达式模式。模式 [;,] 匹配任何出现的逗号或分号。

操作方法如下:

$names = "John Doe, Jane Smith; Robert Johnson, Emily Davis; Michael Brown"
$splitNames = $names -split '[;,]'
$splitNames

使用 VS code 运行上面的脚本将得到下面屏幕截图中的输出。我执行了上面的脚本。

[玩转系统] 如何在 PowerShell 中拆分字符串?

这里 :

  • -split 运算符用于分割字符串。
  • 模式 [;,] 是匹配逗号 (,) 或分号 (;) 的正则表达式。
  • 结果是一个字符串数组,每个字符串代表一个用逗号或分号分隔的名称。

如果您想从拆分结果中删除任何前导或尾随空格,可以对数组的每个元素使用 Trim() 方法。操作方法如下:

$splitNames = ($names -split '[;,]').ForEach({ $_.Trim() })
$splitNames

5. 分割字符串并保留分隔符

以下示例展示了如何在 PowerShell 中拆分字符串,同时使用正则表达式保留分隔符。

假设您有一个字符串,其中包含以逗号和分号分隔的名称列表,并且您想要拆分该字符串但在结果中保留分隔符:

$names = "John Doe, Jane Smith; Robert Johnson, Emily Davis; Michael Brown"

您可以使用带有正向先行断言的正则表达式来实现此目的。模式 (?=[;,]) 将匹配后面跟有逗号或分号的任何位置,而不消耗分隔符。

操作方法如下:

$names = "John Doe, Jane Smith; Robert Johnson, Emily Davis; Michael Brown"
$splitNames = $names -split '(?=[;,])'
$splitNames

输出将是:

John Doe
, Jane Smith
; Robert Johnson
, Emily Davis
; Michael Brown
  • -split 运算符用于分割字符串。
  • 模式 (?=[;,]) 是一个使用正向先行断言的正则表达式。它匹配字符串中紧跟逗号 (,) 或分号 (;) 的任何位置,但不消耗这些字符。
  • 结果是一个字符串数组,其中分隔符保留在后续子字符串的开头

如果您想从拆分结果中删除任何前导空格,同时保留分隔符,则可以对数组的每个元素使用 TrimStart() 方法。操作方法如下:

$names = "John Doe, Jane Smith; Robert Johnson, Emily Davis; Michael Brown"
$splitNames = ($names -split '(?=[;,])').ForEach({ $_.TrimStart() })
$splitNames

输出将是:

John Doe
,Jane Smith
;Robert Johnson
,Emily Davis
;Michael Brown

上面的代码确保保留分隔符,并从拆分结果中删除任何前导空格。

6. 在 PowerShell 中按点分割字符串

下面是在 PowerShell 中用点 (.) 分隔符分割字符串的示例。

假设您有一个表示版本号或域名的字符串,并且您想用点 (.) 分隔符分隔它:

$version = "10.0.19041.685"

要使用点作为分隔符将此字符串拆分为各个组成部分,您可以使用 -split 运算符:

$splitVersion = $version -split '\.'
$splitVersion

输出将是:

10
0
19041
685

这里 :

  • -split 运算符用于分割字符串。
  • 模式 \. 是正则表达式,其中 \ 是转义字符,. 是点字符。这确保了分割专门发生在点字符处。
  • 结果是一个字符串数组,每个字符串代表版本号的一部分。

这是另一个例子:考虑一个表示域名的字符串:

$domain = "www.example.com"

要将域名拆分为各个组成部分:

$splitDomain = $domain -split '\.'
$splitDomain

使用 PowerShell 中的 Split() 方法分割字符串

PowerShell 还提供了 .NET String 类中的 .Split() 方法,我们可以用它来拆分字符串。

以下是如何使用 PowerShell 的 .split() 方法拆分字符串的简单示例。

$string = "John Doe,Jane Smith,Michael Johnson"
$names = $string.Split(",")
$names

下面的屏幕截图显示了输出;和上面的方法是一样的。

[玩转系统] 如何在 PowerShell 中拆分字符串?

Split() 方法的示例

让我向您展示一些使用 Split() 方法在 PowerShell 中拆分字符串的示例。

1. 按多个分隔符分割

.Split() 方法允许您指定分隔符数组。例如,如果要将字符串拆分为逗号和空格,可以执行以下操作:

$string = "John Doe, Jane Smith, Michael Johnson"
$delimiters = @(",", " ")
$names = $string.Split($delimiters, [System.StringSplitOptions]::RemoveEmptyEntries)

2. 限制子串数量

您还可以限制 .Split() 方法返回的子字符串数量。例如,如果您只想要前两个子字符串:

$string = "John Doe, Jane Smith, Michael Johnson"
$names = $string.Split(",", 2)

在这种情况下,结果数组将包含:

  • 约翰·多伊
  • 简·史密斯、迈克尔·约翰逊

结论

在本 PowerShell 教程中,我解释了如何使用 split 运算符和 .Split() 方法在 PowerShell 中拆分字符串。

我们还介绍了在 PowerShell 中拆分字符串的各种示例。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯