我有一個更大的 foreach 回圈代碼,但需要在不區分大小寫的情況下執行以下代碼。
下面的代碼片段回傳 false,我如何忽略區分大小寫的 .contains() 和條件為 true?
$a='aa0855'
$b='AA0855 Sample'
$b.Contains($a)
預期值為真。上面的代碼嘗試了 2 個變數,它回傳 false。
uj5u.com熱心網友回復:
.Contains().NET 字串方法確實區分大小寫-在Windows PowerShell中總是區分大小寫,并且默認情況下在PowerShell (Core) 7 中。
因此,在PowerShell (Core) 7 中,您可以執行以下操作:
# PS 7 only
# -> $true
$a='aa0855'; $b='AA0855 Sample'; $b.Contains($a, 'InvariantCultureIgnoreCase')
第二個.Contains()引數被轉換為型別的列舉值StringComparison;InvariantCultureIgnoreCase與 PowerShell 的運算子默認使用的值相同,即不區分大小寫的比較,它與區域性無關(即在不變區域性的背景關系中執行)。
在Windows PowerShell中,您有兩個選項,使用 PowerShell運算子,默認情況下不區分大小寫:
- 選項 A:使用
-like,它是基于通配符的:
$a='aa0855'; $b='AA0855 Sample'; $b -like "*$a*"
如果在通配符運算式的背景關系中$a包含作為元字符的字符,即*and ?, and [/ ], 則將它們單獨轉義,或者更簡單地說,在整個字串中轉義:`[WildcardPattern]::Escape()
$a='aa0855'; $b='AA0855 Sample'; $b -like ('*{0}*' -f [WildcardPattern]::Escape($a))
- 選項 B:使用
-match,這是基于正則運算式的:
$a='aa0855'; $b='AA0855 Sample'; $b -match $a
如果在正則運算式的背景關系中$a包含作為元字符的字符,例如.,則必須將它們轉義,或者單獨使用\,或者更簡單地說,在整個字串中使用[regex]::Escape():
$a='aa0855'; $b='AA0855 Sample'; $b -match [regex]::Escape($a)
或者,使用Windows PowerShell 中也提供的不同/附加 .NET API :
選項C:查找字串中子字串的索引,可以不區分大小寫;回傳值表示不是的子字串:
$a$bString.IndexOf()-1$a$b$a='aa0855'; $b='AA0855 Sample' -1 -ne $b.IndexOf($a, [StringComparison]::InvariantCultureIgnoreCase)- 請注意,在這種情況下
[StringComparison]::InvariantCultureIgnoreCase,即必須使用精確引數型別的值來明確地針對正確的方法多載;字串快捷方式 ,將'InvariantCultureIgnoreCase'是不明確的。
- 請注意,在這種情況下
選項 D:在使用(單引數,區分大小寫)多載之前將兩個字串都轉換為小寫:
.Contains()- 請參閱js2010 的答案。
uj5u.com熱心網友回復:
這是另一種方式:
$a='aa0855'; $b='AA0855 Sample'; $b.ToLower().Contains($a.ToLower())
True
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/521954.html
標籤:电源外壳子串字符串匹配
上一篇:從陣列中洗掉最后一個逗號
