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

[玩转系统] PowerShell 从字符串中删除特殊字符 [5 种方法]

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

PowerShell 从字符串中删除特殊字符 [5 种方法]


[玩转系统] PowerShell 从字符串中删除特殊字符 [5 种方法]

使用Regex.Replace()方法

使用 Regex.Replace() 方法从 PowerShell 中的指定字符串中删除特殊字符。

使用 Regex.Replace() 方法:

$str = "How #$%are ^&*you?@!"
$cleanedStr = [System.Text.RegularExpressions.Regex]::Replace($str, '[^\w\s]', '')

Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@

输出 :

Original String: How #$%are ^&*you?@!
Cleaned String: How are you

首先,我们声明一个名为 $str 的变量,并将其值设置为包含一些特殊字符的字符串。然后,我们使用 System.Text.RegularExpressions 命名空间中的 Regex 类的 Replace() 方法将特殊字符替换为空细绳。

Replace() 方法采用三个参数:字符串 ($str)、正则表达式 ('[^\w\s]' ) 和一个空字符串 ('')。正则表达式模式匹配除单词字符(由 \w 表示)或空白字符(由 \s 表示)以外的任何字符。这里,^表示否定。请注意,替换字符串为空 (''),从输入字符串中删除匹配的特殊字符。

接下来,我们使用 Write-Host cmdlet 在 PowerShell 控制台上显示原始且经过清理的字符串; @"..."@ 表示法用于编写多行语句。

单词字符为[a-zA-Z0-9_]

请记住,如果 System.Text.RegularExpressions 命名空间在您的系统中尚不可用,请使用 Add-Type cmdlet,如下所示:

添加命名空间:

Add-Type -TypeDefinition @"
using System.Text.RegularExpressions;
"@

Add-Type cmdlet 动态地将程序集或 .NET 类型添加到 PowerShell 会话。如果所需的命名空间尚不可用,则需要此 cmdlet。

类似地,我们在 ForEach 循环中使用 Regex.Replace() 方法从 PowerShell 中的字符串数组中删除特殊字符。

使用 Regex.Replace() 方法:

$strArray = @("How #$%are ^&*you?@!", "Hello $&World")

$cleanedStr = foreach ($string in $strArray) {
        [System.Text.RegularExpressions.Regex]::Replace($string, '[^\w\s]', '')
}

Write-Host @"
Original Array of Strings: $strArray
Cleaned Array of Strings: $cleanedStr
"@

输出 :

Original Array of Strings: How #$%are ^&*you?@! Hello $&World
Cleaned Array of Strings: How are you Hello World

在上面的代码栅栏中,我们使用数组运算符 (@()) 创建了一个字符串数组,并将该数组分配给 $strArray 变量。接下来,我们使用 ForEach 循环来迭代 $strArray。之后,我们在每次迭代中使用 Regex.Replace() 方法从当前字符串 ($string) 中删除特殊字符。我们通过前面的代码示例了解了 Regex.Replace() 方法;你可以参考一下。

我们将清理后的字符串分配给 $cleanedStr 变量。最后,我们使用 Write-Host cmdlet 在控制台上打印原始和更新后的字符串数组。

使用 String.Replace() 方法

使用 String.Replace() 方法从 PowerShell 中的指定字符串中删除特殊字符。当删除特定的特殊字符时,此方法非常有用。

使用 String.Replace() 方法:

$str = "How #$%are ^&*you?@!"
$specialChars = @('#','$','%','^','&','*','@','!')
echo "Original String: $str"

ForEach ($character in $specialChars) {
    $str = $str.Replace($character, '')
}

echo "Cleaned String: $str"

输出 :

Original String: How #$%are ^&*you?@!
Cleaned String: How are you?

同样,我们的 $str 包含特殊字符。然后,我们使用数组运算符 (@()) 创建一个数组,其中每个项目都是我们不希望出现在输出字符串中的特殊字符。我们将此数组存储在 $specialChars 变量中。接下来,我们使用 echo 命令在 PowerShell 控制台上显示 $str

之后,我们使用 ForEach 循环(又名 ForEach 语句)来迭代 $specialChars。我们在每次迭代中调用 String 类的 Replace() 方法。它有两个参数,当前字符和一个空字符串;在这里,我们想用空字符串替换匹配的当前字符。

请注意,我们在每次迭代中都更新了 $str。最后,我们使用另一个 echo 来打印更新后的 $str

类似地,我们在嵌套的 ForEach 循环中使用 String.Replace() 方法从 PowerShell 中的字符串数组中删除特殊字符。

使用 String.Replace() 方法:

$strArray = @("How #$%are ^&*you?@!", "Hello $&World")
$specialChars = @('#','$','%','^','&','*','@','!')
echo "Original Array of Strings: $strArray"

ForEach ($index in 0..($strArray.Length - 1)) {
    ForEach ($character in $specialChars) {
        $strArray[$index] = $strArray[$index].Replace($character, '')
    }
}

echo "Cleaned Array of Strings: $strArray"

输出 :

Original Array of Strings: How #$%are ^&*you?@! Hello $&World
Cleaned Array of Strings: How are you? Hello World

此示例与上一个示例相当,后者有一个字符串数组 ($strArray)、一个特殊字符数组 ($specialChars),并使用了 echo 命令在 PowerShell 控制台上显示 $strArray

然后,我们使用嵌套的 ForEach 循环。外层循环负责迭代$strArray;它使用 $index 变量来访问 $strArray 中的每个元素。内部循环负责循环 $specialChars 数组。

在内部 ForEach 循环中,我们使用 String.Replace() 方法有效地将特殊字符替换为空字符串,以将它们从字符串中取出。最后,我们使用另一个 echo 来显示更新后的字符串数组。

使用 -replace 运算符

-replace 运算符可与正则表达式的不同变体一起使用,以从给定字符串或字符串数组中删除特殊字符。让我们使用 -replace 运算符来学习它们。

-replace 运算符与通过范围指定的正则表达式结合使用,从 PowerShell 中的指定字符串中删除特殊字符。

使用 -replace 运算符:

$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[^a-zA-Z0-9\s]', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@

输出 :

Original String: How #$%are ^&*you?@!
Cleaned String: How are you

-replace 运算符与使用 ASCII 字符编写的正则表达式结合使用,从 PowerShell 中的指定字符串中删除特殊字符。

使用 -replace 运算符:

$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[^\x30-\x39\x41-\x5A\x61-\x7A\x20]+', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@

输出 :

Original String: How #$%are ^&*you?@!
Cleaned String: How are you

-replace 运算符与使用 Unicode 字符编写的正则表达式结合使用,从 PowerShell 中的指定字符串中删除特殊字符。

使用 -replace 运算符:

$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[^\u0030-\u0039\u0041-\u005A\u0061-\u007A\u0020]+', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@

输出 :

Original String: How #$%are ^&*you?@!
Cleaned String: How are you

使用 -replace 运算符和使用元字符 (\W) 指定的正则表达式,从 PowerShell 中的指定字符串中删除特殊字符。

使用 -replace 运算符:

$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[\W]', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@

输出 :

Original String: How #$%are ^&*you?@!
Cleaned String: Howareyou

使用 -replace 运算符和使用 Unicode 类别编写的正则表达式来删除 PowerShell 中指定字符串中的特殊字符。

使用 -replace 运算符:

$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[^\p{L}\p{Nd}]', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@

输出 :

Original String: How #$%are ^&*you?@!
Cleaned String: Howareyou

或者,如果您想根据项目需要保留一些特殊字符,也可以按照以下方式进行操作。

使用 -replace 运算符:

$str = "How #$%are ^&*you?@!"
$cleanedStr = $str -replace '[^\p{L}\p{Nd}/?/!/\s]', ''
Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@

输出 :

Original String: How #$%are ^&*you?@!
Cleaned String: How are you?!

本节中的上述示例彼此相似,并且都有一个包含特殊字符的 $str。他们都使用 -replace 运算符和正则表达式来删除特殊字符,将其替换为空字符串。我们将清理后的字符串分配给 $cleanedStr 变量。

此外,上述示例使用 Write-Host cmdlet 在 PowerShell 控制台上打印主要字符串和更新后的字符串。它们仅在指定正则表达式方面有所不同。下面我们就来学习一下它们。

  1. [^a-zA-Z0-9\s] - 此正则表达式模式匹配除字母(a-zA-Z)、数字之外的所有字符(0-9) 和空格字符 (\s)。
  2. [^\x30-\x39\x41-\x5A\x61-\x7A\x20]+ - 此正则表达式模式是使用 ASCII 字符编写的;它匹配除 09 范围内的数字 (\x30-\x39)、大写字母 (\x41 -\x5A)、小写字母 (\x61-\x7A) 和空格字符 (\x20)。这里,+表示前面的组或字符类应该至少出现一次或多次。
  3. [^\u0030-\u0039\u0041-\u005A\u0061-\u007A\u0020]+ - 此正则表达式与上一个正则表达式类似,但使用 Unicode 字符指定。它匹配除数字 0-9 (\u0030-\u0039)、大写和小写字母 (\u0041-\u005A\u0061 -\u007A)和一个空格字符(\u0020)。
  4. [\W] - 匹配任何非单词字符。请记住单词字符是[a-zA-Z0-9_]。因此,如果输出字符串中不需要下划线 (_),则不得使用此正则表达式。
  5. [^\p{L}\p{Nd}] - 它匹配所有非字母或数字的字符。这里,\p{L} 匹配任何 Unicode 字母字符,包括来自不同语言或脚本的字母。而 \p{Nd} 匹配任何 Unicode 十进制数字字符。
  6. [^\p{L}\p{Nd}/?/!/\s] - 这个正则表达式与上面的类似,但是当我们想要保留某些特殊字符时使用。在本例中,它在输出字符串中保留了 ?! 和空格字符 (\s)。

在上面的正则表达式中,^表示否定,而[]用于定义字符类或组。

正则表达式中的 ASCII 和 Unicode 字符以 \x\u 转义序列为前缀。另一方面,\p 转义序列代表 Unicode 字符类别。

使用 -replace 运算符从 PowerShell 中的字符串数组中删除特殊字符。

使用 -replace 运算符:

$strArray = @("How #$%are ^&*you?@!", "Hello $&World")
$specialChars = '[^\w\s]+'

$cleanedStr = $strArray -replace $specialChars, ''

Write-Host @"
Original Array of Strings: $strArray
Cleaned Array of Strings: $cleanedStr
"@

输出 :

Original Array of Strings: How #$%are ^&*you?@! Hello $&World
Cleaned Array of Strings: How are you Hello World

使用 Char.IsLetterOrDigit 方法

使用 Char.IsLetterOrDigit() 方法从 PowerShell 中的给定字符串中删除特殊字符。

使用 Char.IsLetterOrDigit() 方法:

$str = "How #$%are ^&*you?@!"
$cleanedStr = ""

ForEach ($char in $str.ToCharArray()) {
    if ([Char]::IsLetterOrDigit($char)) {
        $cleanedStr += $char
    }
}

Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@

输出 :

Original String: How #$%are ^&*you?@!
Cleaned String: Howareyou

我们创建了两个字符串变量;一个具有带有特殊字符的字符串值 ($str),另一个则使用空字符串 ($cleanedStr) 进行初始化。然后,我们使用 ForEach 循环迭代字符数组,该数组是使用 ToCharArray() 方法创建的 $str.ToCharArray()

在循环内部,我们使用 if 语句和 IsLetterOrDigit() 方法来检查 $char 表示的当前字符是否是字母或数字。如果是,我们使用 += 运算符将 $cleanedStr 附加到 $char,以有效地省略特殊字符。最后,我们使用 Write-Host cmdlet 在控制台上打印原始和更新后的字符串。

要在输出字符串中保留空格字符,请使用 Char.IsWhiteSpace() 方法,如下所示。

使用 IsLetterOrDigit()/IsWhiteSpace() 方法:

$str = "How #$%are ^&*you?@!"
$cleanedStr = ""

ForEach ($char in $str.ToCharArray()) {
    if ([Char]::IsLetterOrDigit($char) -or [Char]::IsWhiteSpace($char)) {
        $cleanedStr += $char
    }
}

Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@

输出 :

Original String: How #$%are ^&*you?@!
Cleaned String: How are you

请参阅以下代码示例,使用 PowerShell 从字符串数组中删除特殊字符。

使用 IsLetterOrDigit()/IsWhiteSpace() 方法:

$strArray = @("How #$%are ^&*you?@!", "Hello $&World")
$cleanedStrArray = @()

foreach ($string in $strArray) {
    $cleanedStr = ""

    foreach ($char in $string.ToCharArray()) {
        if ([Char]::IsLetterOrDigit($char) -or [Char]::IsWhiteSpace($char)) {
            $cleanedStr += $char
        }
    }

    $cleanedStrArray += $cleanedStr
}

Write-Host @"
Original Array of Strings: $strArray
Cleaned Array of Strings: $cleanedStrArray
"@

输出 :

Original Array of Strings: How #$%are ^&*you?@! Hello $&World
Cleaned Array of Strings: How are you Hello World

此示例与上一个从字符串数组中删除特殊字符的示例类似。外部循环迭代字符串数组 ($strArray),而内部循环迭代当前字符串的字符数组,该字符串被转换为 $string.ToCharArray().

我们在内部循环中使用了 if 语句以及 IsLetterOrDigit()IsWhiteSpace() 方法。这些方法获取当前字符 ($char) 并确定它是字母、数字还是空格。如果是,则使用 += 运算符与 $cleanedStr 变量连接。

内部循环完成后,在外部循环中使用 += 运算符将 $cleanedStr 附加到 $cleanedStrArray 中。最后,我们使用 Write-Host 在 PowerShell 控制台上显示原始和更新后的字符串数组。

使用 String.Join() 方法

使用 String.Join() 方法从 PowerShell 中的输入字符串中删除特殊字符。

使用 String.Join() 方法:

$str = "How #$%are ^&*you?@!"

$cleanedStr = [String]::Join('', 
                     ($str.ToCharArray() |
                      Where-Object { 
                         $_ -match '\w|\s' 
                      }))

Write-Host @"
Original String: $str
Cleaned String: $cleanedStr
"@

输出 :

Original String: How #$%are ^&*you?@!
Cleaned String: How are you

我们使用了 String.Join() 方法,该方法接受两个参数。第一个是空字符串。对于第二个参数,我们使用 ToCharArray() 将字符串转换为字符数组,并将其通过管道传输到 Where-Object cmdlet。

此 cmdlet 迭代字符数组,使用 -match 运算符将当前字符 ($_) 与 \w|\s 模式进行匹配,并使用空字符串(第一个参数)将它们连接起来。在 \w|\s 模式中,\w 匹配单词字符,而 \s 匹配空格字符。最后,我们使用 Write-Host cmdlet 在控制台上显示结果。

使用 String.Join() 方法从 PowerShell 中的字符串数组中删除特殊字符。

使用 String.Join() 方法:

$strArray = @("How #$%are ^&*you?@!", "Hello $&World")
$cleanedStrArray = @()

ForEach ($string in $strArray) {
    $cleanedStrArray += [String]::Join('',
                   ($string.ToCharArray() |
                    Where-Object { 
                        $_ -match '\w|\s'
                    }))
}

Write-Host @"
Original String: $strArray
Cleaned String: $cleanedStrArray
"@

输出 :

Original String: How #$%are ^&*you?@! Hello $&World
Cleaned String: How are you Hello World

此代码片段与上一个代码片段类似,但我们使用 ForEach 循环遍历 $strArray 并将清理后的字符串存储在 $cleanedStr 中大批。

这就是 PowerShell 从字符串中删除特殊字符的全部内容。

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

取消回复欢迎 发表评论:

关灯