我想能夠測試一個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