none
RegEx / .contains() RRS feed

  • Frage

  • Hallo zusammen,

    ich habe ein Problem und komme einfach nicht voran egal wie ich es drehe und wende.

    Ich habe variable1-x z.B. mit den Namen v_foo_123v_bar_123v_boop_123v_boophoop_123, v_boophoop_234. In einer ForEach Schleife möchte ich den entsprechenden String Value aus einer Hashtabel haben, wenn mein Variabel Name mit dem Key Name im Hashtable übereinstimmt. Das klappt soweit mit einem Where-Object, nur bei v_boophoop_123 und v_boophoop_234 bekomme ich mit einem .contains($_.Key) immer String3 und String4, weil ja beides enthalten ist. Mit einem escaped Regex wo ich den Key einfüge dasselbe, da das wohl im Endeffekt auch die gleiche Funktion wie bei .contains() hat.

    Ich habe keine Idee wie ich das z.B. mit nem RexEx Abfragen kann, da die Variabel Namen und Keys immer unterschiedlich sind.

    Mein Code:

    New-Variable -Name v_foo_123 -Value "Foo Test 123" -Force
    New-Variable -Name v_bar_123 -Value "Bar Test 123" -Force
    New-Variable -Name v_boop_123 -Value "Boop Test 123" -Force
    New-Variable -Name v_boophoop_123 -Value "BoopHoop Test 123" -Force
    New-Variable -Name v_boophoop_234 -Value "BoopHoop Test 234" -Force
    $hashtable =@{
       foo = "String1"
       bar = "String2"
       boop = "String3"
       boophoop = "String4"
    }
    
    $variables = Get-Variable -Name v_*
        ForEach ($var in $variables) 
        {
           #$String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2) -match [regex]::Escape($_.Key)}).Value 
           $String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2).Contains($_.Key)}).Value
           Write-host $var.Name "->" $String
        }


    Der $String ist dann bei v_boophoop_123 und v_boophoop_234 immer String3 und String4. Es sollte aber nur String4 sein, vielleicht kann mir jemand helfen, ich bin mit meinem Latein am Ende. 

    Danke und Gruß

    André

    Dienstag, 5. November 2019 12:51

Antworten

  • Hallo,

    so aus dem blauen ...

    New-Variable -Name v_foo_123 -Value "Foo Test 123" -Force
    New-Variable -Name v_bar_123 -Value "Bar Test 123" -Force
    New-Variable -Name v_boop_123 -Value "Boop Test 123" -Force
    New-Variable -Name v_boophoop_123 -Value "BoopHoop Test 123" -Force
    New-Variable -Name v_boophoop_234 -Value "BoopHoop Test 234" -Force
    $hashtable =@{
       foo = "String1"
       bar = "String2"
       boop = "String3"
       boophoop = "String4"
    }
    
    $variables = Get-Variable -Name v_*
        ForEach ($var in $variables) 
        {
           #$String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2) -match [regex]::Escape($_.Key)}).Value 
           $String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2).Contains($_.Key + '_')}).Value
           Write-host $var.Name "->" $String
        }

    Beste Gruesse
    brima

    Dienstag, 5. November 2019 14:19

Alle Antworten

  • Hallo,

    so aus dem blauen ...

    New-Variable -Name v_foo_123 -Value "Foo Test 123" -Force
    New-Variable -Name v_bar_123 -Value "Bar Test 123" -Force
    New-Variable -Name v_boop_123 -Value "Boop Test 123" -Force
    New-Variable -Name v_boophoop_123 -Value "BoopHoop Test 123" -Force
    New-Variable -Name v_boophoop_234 -Value "BoopHoop Test 234" -Force
    $hashtable =@{
       foo = "String1"
       bar = "String2"
       boop = "String3"
       boophoop = "String4"
    }
    
    $variables = Get-Variable -Name v_*
        ForEach ($var in $variables) 
        {
           #$String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2) -match [regex]::Escape($_.Key)}).Value 
           $String= ($hashtable.GetEnumerator() | Where-Object {$var.Name.Substring(2).Contains($_.Key + '_')}).Value
           Write-host $var.Name "->" $String
        }

    Beste Gruesse
    brima

    Dienstag, 5. November 2019 14:19
  • Hallo brima.

    ins grüne, oder eher schwarze. Danke das hat das Problem in meinem Beispiel gelöst.

    Leider hab ich scheinbar das Beispiel nicht ganz genau bedacht, denn in meinem echten Script sind die Variable Namen teilweise ohne folgendes _

    Ich habe die aber einfach angepasst, sind eh nur temporäre, so geht es jetzt.

    Vielen Dank Dir.


    Dienstag, 5. November 2019 15:06