it-swarm.com.de

Prüfen Sie, ob die Zeichenfolge eine Teilzeichenfolge in einer Powershell eines Arrays enthält

Ich studiere Powershell. Ich möchte wissen, wie man prüft, ob der String eine Teilzeichenfolge in einem Array Powershell enthält

  any(substring in string for substring in substring_list)

Gibt es einen ähnlichen Code in Powershell?

mein Powershell-Code ist unten angegeben.

[email protected]('one','two','three')
$s="one is first"

ich möchte $ s mit $ a überprüfen. Wenn eine Zeichenfolge in $ a in $ s vorhanden ist, wird True zurückgegeben. Ist dies in Powershell möglich?

14
TVSuser1654136

Verwenden Sie zur Vereinfachung die tatsächlichen Variablen in der Frage:

[email protected]('one','two','three')
$s="one is first"
$null -ne ($a | ? { $s -match $_ })  # returns $true

Ändern von $ s in not alles in $ a:

$s="something else entirely"
$null -ne ($a | ? { $s -match $_ })  # returns $false

(Das sind etwa 25% weniger Zeichen als die Antwort von chingNotCHing, wobei natürlich die gleichen Variablennamen verwendet werden :-)

17
Michael Sorens
($substring_list | %{$string.contains($_)}) -contains $true

sollte strikt Ihrem Einliner folgen

8
chingNotCHing

Für PowerShell Ver. 5,0+

Anstatt:

$null -ne ($a | ? { $s -match $_ })

probiere diese einfachere Version:

$q="Sun"
$p="Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
[bool]($p -match $q)

Dies gibt $ True zurück, wenn der Teilstring $ q sich im String-Array $ q befindet

2
Michael Koza

Die Antwort auf die Antwort von Michael Sorens funktioniert am besten, um die Fallstricke von Teilzeichenfolgen zu vermeiden, die nur eine geringfügige Regex-Änderung erfordern. Wenn Sie den String $ s = "oner is first" haben, würde der Code immer noch "true" zurückgeben, da "one" mit "oner" übereinstimmen würde (Übereinstimmung in Powershell bedeutet, dass der zweite String den ersten String enthält.

    [email protected]('one','two','three')
    $s="oner is first"
    $null -ne ($a | ? { $s -match $_ })  # returns $true

fügen Sie Regex für Word-Begrenzung '\ b' hinzu, und der Wert für 'oner' gibt jetzt 'false' zurück

    $null -ne ($a | ? { $s -match "\b$($_)\b" })  # returns $false
2
Andrew Bacik

Es ist möglich, eine Untermenge von Zeichenfolgen auszuwählen, die eine der folgenden Zeichenfolgen enthält:

$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
  }
0
Mikhail Orlov

eine Möglichkeit, dies zu tun

[email protected]("test","one")
$str="oneortwo"
$array|foreach{
    if ($str -match $_){
        echo "$_ is a substring of $str"
    }
}
0
Loïc MICHEL