2016-11-09 6 views
-3

私は解決しようとしている、おそらく単純なタスクを持っています。 文字列を解析して変数に一致させるためにpowershellを使いたいと思っています。 文字列 "=フォームRegexpとpowershell

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

であり、私はそれは三つの変数$タイトル= "XYZの記録"、$のstart_time = "2016年11月8日午後07時58分03秒" は、$ STOP_TIMEを生成したいです2016-11-08 20:33:00 "。

regexpに行く方法はありますか、またはpowershellにはもっと簡単な機能がありますか? iveは見ていた - 分割と - 前者のマッチ。

私に手を差し伸べる時間がありますか? よろしく


編集:

マティアスの答えは、このソリューション

$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] 

単純に私を導くが、それはあなたが文字列からいくつかの試合をつかむためにnamed capture groupを使用することができます

+0

で(あなたがコメントで述べたことを)$テキスト=「メッセージ の線に沿って何か------- RECORDING XYZは、2016から11に記録を開始し、あなたの試みを修正-08 19:58:03、スケジュールは2016-11-08 20:33:00に停止しました。 "$ a = $ text -split" \ n " $ b = $ a -match" ^(。+)\ \ s(。+)で記録を開始し、スケジュールどおりに(。+)停止しました。 $ title = $ t [1] – Jiinxy

答えて

0

に動作します:

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

私にはうまくいきませんでしたが、それは私を実用的なソリューションに導きます(私の質問の編集を参照してください)。 – Jiinxy

0

私はスプリット

$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

私の仕事の解決策に非常に似ています。 – Jiinxy