检查字符串是否包含数组Powershell中的任何子字符串

时间:2015-07-24 05:51:24

标签: powershell

我正在研究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中

7 个答案:

答案 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
  }