[玩转系统] PowerShell 从字符串中删除特殊字符 [5 种方法]
作者:精品下载站 日期:2024-12-14 05:31:17 浏览:15 分类:玩电脑
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 控制台上打印主要字符串和更新后的字符串。它们仅在指定正则表达式方面有所不同。下面我们就来学习一下它们。
[^a-zA-Z0-9\s]
- 此正则表达式模式匹配除字母(a-z
和A-Z
)、数字之外的所有字符(0-9
) 和空格字符 (\s
)。[^\x30-\x39\x41-\x5A\x61-\x7A\x20]+
- 此正则表达式模式是使用 ASCII 字符编写的;它匹配除0
到9
范围内的数字 (\x30-\x39
)、大写字母 (\x41 -\x5A
)、小写字母 (\x61-\x7A
) 和空格字符 (\x20
)。这里,+
表示前面的组或字符类应该至少出现一次或多次。[^\u0030-\u0039\u0041-\u005A\u0061-\u007A\u0020]+
- 此正则表达式与上一个正则表达式类似,但使用 Unicode 字符指定。它匹配除数字 0-9 (\u0030-\u0039
)、大写和小写字母 (\u0041-\u005A
和\u0061 -\u007A
)和一个空格字符(\u0020
)。[\W]
- 匹配任何非单词字符。请记住单词字符是[a-zA-Z0-9_]
。因此,如果输出字符串中不需要下划线 (_
),则不得使用此正则表达式。[^\p{L}\p{Nd}]
- 它匹配所有非字母或数字的字符。这里,\p{L}
匹配任何 Unicode 字母字符,包括来自不同语言或脚本的字母。而\p{Nd}
匹配任何 Unicode 十进制数字字符。[^\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 从字符串中删除特殊字符的全部内容。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag