我正在研究powershell。我想知道如何检查字符串是否包含数组中的任何子字符串Powershell.i知道如何在python中执行相同操作。代码如下所示
any(substring in string for substring in substring_list)
PowerShell中是否有类似的代码?
我的powershell代码如下所示。
$a=@('one','two','three')
$s="one is first"
我想用$ a来验证$ s。如果$ s中的任何字符串出现在$ s中,则返回True.Is它有可能在powershell中
答案 0 :(得分:22)
为简单起见,使用问题中的实际变量:
.partition
修改$ s到而不是包含$ a中的任何内容:
$a=@('one','two','three')
$s="one is first"
$null -ne ($a | ? { $s -match $_ }) # returns $true
(比chingNotCHing的答案少了25%的字符,当然使用相同的变量名称: - )
答案 1 :(得分:9)
($substring_list | %{$string.contains($_)}) -contains $true
应该严格遵循你的单行
答案 2 :(得分:4)
Michael Sorens代码答案最能避免部分子字符串匹配的陷阱,只需要对正则表达式进行一些修改即可。如果您拥有字符串$ s =“ oner first”,则代码仍将返回true,因为“ one”将与“ oner”匹配(powershell中的匹配表示第二个字符串包含第一个字符串。
$a=@('one','two','three')
$s="oner is first"
$null -ne ($a | ? { $s -match $_ }) # returns $true
为单词边界'\ b'添加一些正则表达式,'oner'上的r现在将返回false
$null -ne ($a | ? { $s -match "\b$($_)\b" }) # returns $false
答案 3 :(得分:2)
对于PowerShell版本。 5.0 +
代替:
$null -ne ($a | ? { $s -match $_ })
尝试这个简单的版本:
$q="Sun"
$p="Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
[bool]($p -match $q)
如果子字符串$ q在字符串$ q的数组中,则返回$ True
答案 4 :(得分:2)
(我知道这是一个较旧的线程,但至少将来我可能会帮助人们。)
使用-match给出的任何响应都将产生错误的答案。 示例:$ a -match $ b如果$ b为“。”,则$ b将产生假负数。
一个更好的答案是使用.contains-但它区分大小写,因此在比较之前,您必须将所有字符串设置为大写或小写:
getInitialProps
返回$ True
$a = @('one', 'two', 'three')
$s = "one is first"
$a | ForEach-Object {If ($s.toLower().Contains($_.toLower())) {$True}}
不返回任何内容
如果愿意,可以调整它以返回$ True或$ False,但是IMO上面的操作更容易。
答案 5 :(得分:0)
一种方法
$array=@("test","one")
$str="oneortwo"
$array|foreach{
if ($str -match $_){
echo "$_ is a substring of $str"
}
}
答案 6 :(得分:0)
可以选择包含任何字符串的字符串子集,如下所示:
$array = @("a", "b")
$source = @("aqw", "brt", "cow")
$source | where {
$found = $FALSE
foreach($arr in $array){
if($_.Contains($arr)){
$found = $TRUE
}
if($found -eq $TRUE){
break
}
}
$found
}