[玩转系统] 在 PowerShell 中检查字符串是否包含数字 [4 种方法]
作者:精品下载站 日期:2024-12-14 05:27:08 浏览:15 分类:玩电脑
在 PowerShell 中检查字符串是否包含数字 [4 种方法]
使用正则表达式
每当需要查找文本中的特定模式时,我们都会使用正则表达式。正则表达式,也称为regex
,由运算符、文字字符和其他结构组成。 PowerShell 有各种 cmdlet 和运算符,允许我们使用正则表达式;其中一些如下:
- 使用
-match
运算符 - 使用
-split
运算符 - 使用
Select-String
Cmdlet - 使用带有
-Regex
选项的switch
语句
我们还可以使用 -like
运算符,但它不适用于正则表达式。我们将看到如何在我们的案例中使用它。下面让我们逐一了解一下。
使用 -match
运算符
使用-match
运算符检查指定字符串是否包含数字。
使用 -match 运算符:
$string = "It is a sample string containing 0123 numbers."
if ($string -match "\d+") {
Write-Host "The string has number(s)."
}else{
Write-Host "The string does not has number(s)."
}
输出 :
The string has number(s).
首先,我们定义了一个名为 $string
的变量,并使用包含数值的字符串值对其进行初始化。接下来,我们使用带有 -match
运算符的 if
语句和正则表达式 (\d+
) 来检查 $string
包含任何数字,如果包含则返回 True
。结果,if
语句变为 True
,执行了 if
块;否则,else
块将被执行。最后,我们使用 Write-Host cmdlet 显示自定义消息,让用户知道是否在 $string
中找到了数字。
这里,\d
只会匹配包含小数点的数字,而不管小数点的位置如何,这意味着 01.23
、.0123
和 0123.
全部都会被检测到。同时,+
将匹配一个或多个数字实例。
使用类似
运算符
使用-like
运算符来确定字符串是否包含数字。
使用类运算符:
$string = "It is a sample string containing 0123 numbers."
if ($string -like "*[0-9]*") {
Write-Host "The string has number(s)."
}else{
Write-Host "The string does not has number(s)."
}
输出 :
The string has number(s).
此示例与上一个示例类似,但我们使用了 -like
运算符,该运算符不支持正则表达式。尽管如此,我们仍然可以使用此运算符来检查 $string
是否包含使用模式匹配的数字。这里,*[0-9]*
匹配包含一个或多个数字的字符串。如果找到匹配,-like
运算符也会返回 True
,这会导致 if
块的执行;否则,else
部分将被执行。
使用 -split
运算符
检查字符串是否包含数字:
- 定义一个包含数字的字符串。
- 将
-split
运算符与\D+
正则表达式结合使用来匹配一个或多个非数字字符,从而生成一个包含数字序列的数组。 - 使用 foreach 循环迭代包含我们在上一步中收到的数字序列的数组。
在每次迭代中:
- 使用带有
-match
运算符和正则表达式 (\d+
) 的if
语句来检查它是否包含数字
- 使用带有
- 如果满足
if
条件,请使用Write-Host
cmdlet,并使用break
语句退出循环。
使用 -split 运算符:
$string = "It is a sample string containing 0123 numbers."
$elements = $string -split "\D+"
foreach ($element in $elements) {
if ($element -match "\d+") {
Write-Host "String contains a number."
break
}
}
输出 :
The string has number(s).
在这里,我们使用 -split
运算符将 $string
拆分为子字符串数组。分割基于指定的分隔符,\D+
;仅当找到一个或多个连续的非数字字符时才匹配。拆分操作后,我们将只剩下由数字组成的子字符串,并将其保存在 $elements
中。
接下来,我们使用 foreach
语句来循环 $elements
。然后,对于每次迭代,我们使用 if
语句以及 -match
运算符和 \d+
正则表达式来检查它是否包含该数字;这个 if
语句与我们在第一个示例代码中所做的相同。最后,如果满足if
语句,我们使用Write-Host
通知用户$string
有数字并退出使用 break
语句进行循环。
现在,我们为什么退出循环?这是因为我们只需要查找 $string
是否有数字即可;我们并不关心我们发现该数字出现了多少次。因此,即使字符串中有多个数字,此循环也会写入 PowerShell 控制台一次,因为 break
语句将在找到第一个匹配项后终止循环。
使用Select-String
Cmdlet
使用Select-String
cmdlet 检查字符串是否包含数字。
使用选择字符串 Cmdlet:
$string = "It is a sample string containing 0123 numbers."
$output = Select-String -InputObject $string -Pattern "\d+"
if ($output) {
Write-Host "The string has number(s)."
}else{
Write-Host "The string does not has number(s)."
}
输出 :
The string has number(s).
首先,我们定义并初始化 $string
变量来保存字符串类型值。接下来,我们使用带有 -InputObject
和 -Pattern
参数的 Select-String
cmdlet 来检查输入对象是否包含给定模式。
现在,输入对象和模式是什么?让我们从 Select-String cmdlet 开始学习它们;它用于查找文件和字符串中的文本。此 cmdlet 支持正则表达式来查找字符串或文件中的特定模式。这里的模式是 \d+
,它只匹配数字,包括小数点,而不管小数点的位置。输入对象是指我们使用-InputObject
参数指定的输入字符串或文件。
如果找到匹配项,Select-String
cmdlet 将返回 True
;否则,False
。我们将此布尔值与 if
一起使用;如果为 True
,则运行 if
块;否则,else
块。
现在,向前迈出一步,尝试更具挑战性的解决方案。假设一个字符串数组,其中每个元素包含一个简单的数字、社会安全号码、电子邮件,或者只是一个简单的文本。我们的工作是迭代字符串数组的每个元素,并检查它是否包含简单的数字、社会安全号码、电子邮件或其中都不包含。我们还必须解决默认情况。所有这一切都可以通过以下解决方案来完成。让我们继续吧。
使用带有 -Regex
选项的 switch
语句
检查字符串是否包含数字或字符串:
- 使用数组运算符 (
@()
) 创建数组。 - 使用
foreach
循环迭代上一步中创建的数组。 在每次迭代中:
- 使用带有
-Regex
选项的switch
语句来匹配大小写并打印消息。
- 使用带有
使用带有 -Regex 选项的 switch 语句:
$stringArray = @("This string has 123 as id.",
"This string has 123-45-6789 as SSN.",
"This string has [email protected] as an email.",
"This is just a string")
foreach ($string in $stringArray) {
switch -Regex ($string){
"\b\d{3}-\d{2}-\d{4}\b"
{Write-Host "This string has social security number";Break}
"\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b"
{Write-Host "This string has an email address";Break}
"\b\d+\b"
{Write-Host "This string has id number";Break}
default
{Write-Host "This pattern is something else"}
}
}
输出 :
This string has id number
This string has social security number
This string has an email address
This pattern is something else
首先,我们使用以 @()
表示的数组运算符创建一个具有字符串类型值的数组,并将其存储在 $stringArray
变量中。接下来,我们使用 foreach
循环迭代 $stringArray
并将每个 $string
传递给 switch
语句。最后,我们使用带有 -Regex
选项的 switch
语句来处理正则表达式。
对于每次迭代,switch
语句都会根据提供的正则表达式匹配大小写,并使用 Write-Host
cmdlet 显示一条消息。请注意,一旦发现匹配,我们就使用 Break
语句来停止 switch
语句。如果未找到匹配项,将执行 default
情况。
猜你还喜欢
- 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