正则表达式日期解析

时间:2018-11-05 20:25:21

标签: regex powershell

有人可以用正则表达式来帮助我拉动

Wed Oct 31从下面

Date:   Wed Oct 31 12:55:00 2018 -0500

显然日期会在日志中每天更改。

3 个答案:

答案 0 :(得分:6)

您已经要求使用正则表达式,但是您的示例已经显示了时区形式的陷阱!

仅在使用正则表达式时,时区偏移会将其推入午夜,这可能会给您带来错误的一天。我建议改为使用[DateTime]::TryParseExact,然后使用日期字符串格式将其转换为所需的格式:

$Line = "Date:   Wed Oct 31 12:55:00 2018 -0500"

[DateTime] $Date = New-Object DateTime

$Success = [DateTime]::TryParseExact($Line,
    "'Date:   'ddd MMM dd HH':'mm':'ss yyyy zzz",
    [System.Globalization.CultureInfo]::InvariantCulture,
    [System.Globalization.DateTimeStyles]::None,
    [ref] $Date)

if ($Success) {
    $Date.ToString("ddd MMM dd")
}

上面的示例打印出来

Wed Oct 31

答案 1 :(得分:2)

这不是一个正则表达式,但似乎可以完成工作... [咧嘴]

$FullDateString = 'Date: Wed Oct 31 12:55:00 2018 -0500'
# the `.Split()` version doesn't take into account random extra spaces in the source
#    use the next line instead
#$DateString = $FullDateString.Split(' ')[1..3] -join ' '
$DateString = ($FullDateString -split '\s+')[1..3] -join ' '

$DateString

output = Wed Oct 31

上面发生了什么...

  • 在空格上分割
  • 从结果数组中获取第2至第4 [1..3]个项目
  • 使用“空格”定界符将它们加入

您可能想使用一种更灵活的方法,并首先将其转换为[datetime]对象,然后将.ToString()与首选格式一起使用。

答案 2 :(得分:1)

看一下herehere。这样,您可以找到一个非常简单的正则表达式来解决您的问题!

这就是我所拥有的:

$date = 'Date: Wed Oct 31 12:55:00 2018 -0500'
$date -replace "Date: (\w{3} \w{3} \d{2}) .*", '$1'

我不知道您真正想做什么,所以只要更改所需的正则表达式即可;)