2016-12-07 14 views
0

の日付見つける:私は、テキストファイル解析されているPowerShellの変数

$Sel = select-string -pattern "Date=*" -path D:\test_file.txt -List

、ここではその結果である:

D:\test_file.txt:3: <aaa="000000" Date="2016-12-05"> <bbbbb="cccc" dddd="20161209" eeee="2016-12-09" fff="ggggg" hhhh="hhh" aaaa="1" bbbb="100" cccc="100"> 

私はそれ

$regex = "(19|20)[0-9]{2}[- -.](0[1-9]|1[012])[- -.](0[1-9]|[12][0-9]|3[01])" 
上で正規表現を実行しようとしています

これを再度解析するには、

select-string -pattern $regex -InputObject $Sel 

しかし、それは機能しませんでした。上記の文字列で日付を見つける方法はありますか?

答えて

0

これは正しいはずです:日付パターンは常に指定された形式Date="yyyy-MM-dd"である

$sel -match $regex 
$date = $matches[0] 
+0

ありがとうございます。$ dateはどのように定義しますか? – user5711825

+0

あなたが望む日付は$ matches [0]です。$ matches [0]はシステム変数で、別の正規表現のマッチで上書きできるので、別の変数に入れます。できるだけ早く抽出する必要があります。 2行目が$ matches [0]だった場合、出力に日付が書き込まれます。 –

+0

OKこれを実行した結果は次のようになります。 'PS C:\ $ sel -match $ regex True'とその後$ date = $は[0]と一致します。 – user5711825

1

場合は、最も簡単な方法は、そのパターンを探すことです。 1900年代と2000年代をまったく心配する必要はありません。そうですね、

# Test data 
$sel = 'D:\test_file.txt:3:< aaa="000000" Date="2016-12-05" >' 

# Let's match date that starts with Date= literal 
[regex]$rex = 'Date="(\d{4}-\d{2}-\d{2})"' 

# Print the result if matched 
if($rex.Match($sel).groups.count -eq 2) { 
    $rex.Match($sel).groups[1].value 
} 
関連する問題