4 Stimmen

eine Zeichenkette nach einem Array von Zeichenkettenfragmenten durchsuchen

Ich muss eine Zeichenkette durchsuchen, um zu sehen, ob sie einen der Texte in einem Array von Zeichenketten enthält. Zum Beispiel

excludeList="warning", "a common unimportant thing", "something else"

searchString=hier ist eine Zeichenkette, die uns über eine allgemeine, unwichtige Sache informiert.

otherString=etwas Gewöhnliches, das aber nichts damit zu tun hat

In diesem Beispiel würden wir die Zeichenkette "common unimportant thing" aus dem Array in meiner searchList finden und true zurückgeben. otherString enthält jedoch keine der vollständigen Zeichenketten im Array und würde daher false zurückgeben.

Ich bin mir sicher, dass das nicht so kompliziert ist, aber ich habe zu lange darauf geschaut...

Aktualisieren: Das Beste, was ich bis jetzt herausfinden konnte, ist:

#list of excluded terms
$arrColors = "blue", "red", "green", "yellow", "white", "pink", "orange", "turquoise"

#the message of the event we've pulled
$testString = "there is a blue cow over there"
$test2="blue"
$count=0
#check if the message contains anything from the secondary list
$arrColors | ForEach-Object{
    echo $count
    echo $testString.Contains($arrColors[$count])
    $count++

}

es ist allerdings nicht allzu elegant...

0 Stimmen

Ich denke, ich könnte dies in einer Schleife ein Element zu einer Zeit zu tun haben, aber müssen eine wie-Anweisung verwenden, die ich nicht bekommen, arbeiten mit einem Array-Element, siehe Code unten #Liste der ausgeschlossenen Begriffe $arrColors = "blau", "rot", "grün", "gelb", "weiß", "rosa", "orange", "türkis" #die Nachricht des Ereignisses, das wir gezogen haben $testString = "dort drüben ist eine blaue Kuh" $test2="blau" #prüfen, ob die Nachricht etwas aus der sekundären Liste enthält $testString -like " $arrColors[0] " $testString -like " blau " $test2 -enthält $arrColors[0]

0 Stimmen

Das obige Ergebnis ist False True True Warum ist der $testString -like " nicht $arrColors[0] " return true?

10voto

Shay Levy Punkte 113401

Sie können einen regulären Ausdruck verwenden. Das Regex-Zeichen "|" ist das Äquivalent zum Operator OR:

PS> $excludeList="warning|a common unimportant thing|something else"
PS> $searchString="here is a string telling us about a common unimportant thing."
PS> $otherString="something common but unrelated"

PS> $searchString -match $excludeList
True

PS> $otherString -match $excludeList
False

4 Stimmen

Nur ein Zusatz zu Ihrer Antwort - wenn die $excludeList ein Array ist, würde ich verwenden ($excludeList | % { [regex]::escape($_) } ) -join "|" um ihn in einen richtigen regulären Ausdruck zu verwandeln.

3voto

Emperor XLII Punkte 12434

Die folgende Funktion findet alle in der angegebenen Zeichenkette enthaltenen Elemente und gibt true zurück, wenn sie gefunden wurden.

function ContainsAny( [string]$s, [string[]]$items ) {
  $matchingItems = @($items | where { $s.Contains( $_ ) })
  [bool]$matchingItems
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X