我想能够测试一个powershell字符串是否全部是小写字母。检查字符串在PowerShell中的所有小写字母
我不是世界上最好的正则表达式的猴子,但我一直在沿着这些线路尝试:
if($mystring -match "[a-z]^[A-Z]") {
echo "its lower!"
}
但是,当然,他们不工作,和搜索interwebs还没有得到我的任何地方。有没有人知道如何做到这一点(除了测试循环中的每个字符)?
我想能够测试一个powershell字符串是否全部是小写字母。检查字符串在PowerShell中的所有小写字母
我不是世界上最好的正则表达式的猴子,但我一直在沿着这些线路尝试:
if($mystring -match "[a-z]^[A-Z]") {
echo "its lower!"
}
但是,当然,他们不工作,和搜索interwebs还没有得到我的任何地方。有没有人知道如何做到这一点(除了测试循环中的每个字符)?
PowerShell的默认匹配不区分大小写的,所以你需要使用-cmatch
操作:
if ($mystring -cmatch "^[a-z]*$") { ... }
-cmatch
是总是区分大小写的,而-imatch
总是不区分大小写。
注意:你的正则表达式也有点奇怪。基本上,你要我在这里提供的之一,下设
^
)[a-z]
)*
)。您可以使用+
代替禁用空字符串。$
)。两个锚点确保每个字符在字符串中的正则表达式必须匹配。如果你只是使用[a-z]*
,那么这将匹配任何字符串,它至少有0
小写字母的某个地方在其中。这将是每一个字符串。PS:艾哈迈德说的有道理,不过,如果你的字符串可能包括其他的事情不是字母也和你想要的,而不是还要求,以确保每一个信它是小写,字符串仅由字母,那么你必须反转字符类,排序:
if ($mystring -cmatch "^[^A-Z]*$") { ... }
的^
在字符类反转类的开始,每一个人物匹配不包括在内。因此这个正则表达式只会在字符串包含大写字母的地方失败。仍然需要-cmatch
。
尝试这种模式,它匹配任何是不大写字母:"^[^A-Z]*$"
这将返回false任何大写字母,同时允许字符串包含其他项目,只要所有字母都是小写。例如,“hello world 123”将是有效的。
如果您严格要字母不含空格,数字等,那么Johannes的解决方案就适合了。
默认情况下,PowerShell不区分大小写,因此这不起作用。不是没有其他运营商。 – Joey
如果您的测试就是这么简单,你可以,而且也应该避免使用正则表达式:
$mystring -ceq $mystring.ToLower()
哇,那更简单。下次我使用它。 – falkaholic
如果您需要,请确保使用方法的重载签名接受'CultureInfo'对象。 – guillermooo
我测试了接受的答案和这个在20,643行的txt文件上,这个答案在每次运行中花费的时间大约是接受的答案的1/2。 –
说的伟大工程,为感谢额外的解释。 – falkaholic