2017-12-13 9 views
1

私は正規表現で遊んでいて、もう少し複雑になっています。私はPowerShellの3.0を実行して、次のタイムスタンプを持っています:複数の置換を行うRegEx

2017-07-26T00:00:39Z私は、タイムスタンプから秒を除去し、00でそれらを置き換えるために、次のコードを使用し

を:タイムスタンプは、現在の形式で摂取しようとしているので、

$($_.Timestamp -replace '^(.*)(\d\d)(.*)$','${1}00$3') 

は今私のユースケースはより複雑になった:

2017年8月17日0時○○分34秒

私はKML目印のタイムスタンプとして、それを正しく利用するために調整する形式を必要とするので、これは物事を複雑にしています。だから私はまだ秒を取り除いて00で置き換える必要がありますが、タイムスタンプのためにズールーを表すために、日付と時刻の間のスペースを置き換えるためにTと最後に付いたZも必要です。単一の正規表現で可能なことはありますか?

答えて

3

正規表現が必要ではないと思います。 DateTimeオブジェクトを使用できるはずです。例えば:

$date = Get-Date "2017-07-26T00:00:39Z" 

あなたがしたい文字列形式で出力するオブジェクトのToStringメソッドを使用することができます。例:

$date.ToString("yyyy-MM-dd hh:mm:ss") 
+0

「不正確な」入力を処理する場合、Regexでは柔軟性が向上します。したがって、正規表現はここで必要かもしれませんが、OP正規表現の '。* '部分に注意してください。これは、タイムスタンプの後にゴミがあるかもしれないことを意味します。 –

+1

PowerShellのほとんどのバージョン(v3 +だと思う)ではdatetimeオブジェクトを使って作業していますが、入力を '[datetime]'オブジェクトとしてキャストして、必要なだけ出力するだけです( 'datetime ')2017-08-17 16: 27:34 ')。ToString(' yyyy-MM-ddTHH:mm:00Z ')は、' 2017-08-17T16:27:00Z 'となります。あるいは、 'Get-Date'は、' get-date '2017-08-17 16:27:34' -f 'yyyy-MM-ddTHH:mm:00Z''で同じ出力を生成し、直ちに出力します。 – TheMadTechnician

関連する問題