2016-06-02 10 views
1

Ich habe ein Problem mit einer schnellen Funktion, die ich für das Aufspalten Sharepoint spezifische IDs geschrieben ({id}; # {name}):Split mit Zeichenfolge in Powershell

function GetOnlyValue { 
param( 
[string] $fullValue 
) 

if(![string]::IsNullOrEmpty($fullValue)) 
{ 
    # On regarde si on a la valeur 
    if($fullValue -Like "*;#*") 
    { 
     $array = $fullValue -split ";#", 2, "simplematch" 

     return $array[-1] 
    } 
} 

return $fullValue 
} 

Aber diese Funktion hat die Hälfte der Arbeit, weil, Wenn ich beispielsweise einen Wert übergebe, der wie folgt formatiert ist: myId; #myName die Funktion gib mir diesen Wert zurück: "#myName" anstelle von "myName".

Danke für Ihre Hilfe!

06/02/2016 EDIT: Diese Funktion ist in einem Modul enthalten, das ich in ein Skript importiere. Ich benutze es in Zusammenhang mit einer Website Sharepoint 2013, das Surfen jeden SPListItem eines SPList:

$formation = GetOnlyValue -fullValue $spItem["Formation"] 
+0

Kann hier nicht reproduzieren. 'myId; #myName '-split'; # ', 2,' simplematch 'funktioniert wie erwartet. – Joey

+0

Ich habe einfache und doppelte Anführungszeichen verwendet, ich habe immer das gleiche Ergebnis:/ – GwenGuts

+0

versuche $ spItem ["Formation"] auszugeben und stelle sicher, dass es eine Zeichenkette ist –

Antwort

0

ich Ihr Problem nicht reproduzieren kann, aber Sie können Ihr Skript vereinfachen mit einem -replace:

function GetOnlyValue { 
    param( 
     [string] $fullValue 
    ) 

    $fullValue -replace '^.*#' 
} 
+0

Wieder ist es bei der ';' aber nicht in der '# #' Gruppe. Danke trotzdem! – GwenGuts

+0

Bitte zeigen Sie mir die Zeichenfolge, die Sie übergeben –

+0

Zum Beispiel: 457; #FirstName Nachname - Organisation. Ich habe in der Ausgabe: #FirstName Nachname - Organisation – GwenGuts

1

ich eine Regex mit Einfanggruppen verwenden würde:

function GetOnlyValue 
{ 
    Param 
    ( 
     [string]$fullValue 
    ) 

    if($fullValue -match '(.*);#(.*)'){ 
     $Matches[2] 
    } 
} 
+0

Nicht wirklich ein Grund dafür; Ihr Code sollte gut funktionieren. Nicht immer muss man mit Regexes herumspielen, besonders wenn der Code nicht von Anfang an gebrochen ist. – Joey

+0

@Joey Ja, es liegt also an OP zu entscheiden. Ich schlage nur vor. – beatcracker

+0

Nein, auch mit der Regex habe ich das Problem – GwenGuts