2016-11-09 5 views
-3

Ich habe eine, wahrscheinlich, einfache Aufgabe, die ich versuche zu lösen - bisher ohne Erfolg. Ich möchte Powershell verwenden, um eine Zeichenfolge in Variablen zu analysieren und abzugleichen. Der String ist von der FormRegexp und Powershell

"Message 
------- 
RECORDING XYZ started recording on 2016-11-08 19:58:03 and stopped on 2016-11-08 20:33:00 as scheduled." 

, und ich will es drei Variablen $ title = "AUFNAHME XYZ", $ START_TIME produzieren = "2016.11.08 19.58.03", $ Stop_Time = " 2016-11-08 20:33:00 ".

Ist regexp der Weg zu gehen oder hat Powershell irgendwelche einfacheren Funktionen? Ich habe mir zum Beispiel -split und -match angesehen.

Bitte hat jemand Zeit, um mir eine Hand zu geben? Grüße


Edit:

Mathias Antwort führen mich zu dieser Lösung

$text = "Message 
------- 
RECORDING XYZ started recording on 2016-11-08 19:58:03 and stopped on 2016-11-08 20:33:00 as scheduled." 

$lines = $text -split "\n" 

$lines[2] -match "^(.+) started recording on (.+) and stopped on (.+) as scheduled." 

Write-Output $Matches[1] 

Einfach, aber es funktioniert

+0

Etwas entlang der Linie von $ text = „Nachricht ------- AUFNAHME XYZ auf 2016-11 Aufnahme gestartet -08 19:58:03 und wie geplant am 2016-11-08 20:33:00 angehalten. "$ A = $ text -split" \ n " $ b = $ a -match"^(. +) \ sstartierte Aufnahme auf \ s (. +) und stoppte auf (. +) wie geplant. " $ title = $ t [1] – Jiinxy

Antwort

0

Sie einen named capture group können mehrere Spiele aus der Zeichenfolge greifen:

if($text -match "-`r?`n(?<recording>.*) started recording on (?<starttime>[\d\-\:\s]+) and stopped on (?<stoptime>[\d\-\:\s]+) as scheduled.") { 
    $title = $Matches['recording'] 
    $start_time = $Matches['starttime'] 
    $stop_time = $Matches['stoptime'] 
} 
+0

Cheers m8 - das hat nicht ganz funktioniert für mich, aber es führte mich zu einer funktionierenden Lösung (siehe meine Bearbeitung der Frage) – Jiinxy

0

ich geändert Ihren Versuch (die Sie im Kommentar erwähnt) mit Split

$text = "Message ------- RECORDING XYZ started recording on 2016-11-08 19:58:03 and stopped on 2016-11-08 20:33:00 as scheduled." 
$a = $text -split "\n" 
$arr = ((($a -split "Message ------- ")-split "started recording on") -split "and stopped on") -split "as scheduled." 

$title = $arr[1] 
$start_time = $arr[2] 
$stop_time = $arr[3] 

write-host $title $start_time $stop_time 
+0

Prost, sehr ähnlich zu meiner Arbeitslösung. – Jiinxy