Регулярный анализ даты - PullRequest
       2

Регулярный анализ даты

0 голосов
/ 05 ноября 2018

Может кто-нибудь помочь мне с регулярным выражением тянуть

Wed Oct 31 снизу

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

Очевидно, что дата будет меняться день ото дня в журнале.

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Посмотрите здесь и здесь . С этим вы можете найти довольно простое регулярное выражение для решения вашей проблемы!

Вот что у меня есть:

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

Я не знаю, что вы действительно хотите сделать, поэтому просто измените регулярное выражение так, как вы хотите;)

0 голосов
/ 06 ноября 2018

Вы запросили регулярное выражение, но ваш пример уже показывает ловушку в виде часового пояса!

Простое использование только одного регулярного выражения может привести к неправильному дню, когда смещение часового пояса переместит его в полночь. Вместо этого я бы рекомендовал вместо этого использовать [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
0 голосов
/ 05 ноября 2018

это не регулярное выражение, но, похоже, это делает работу ... [ ухмылка ]

$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

вывод = Wed Oct 31

что случилось выше ...

  • разбить на пробелы
  • взял 2-4-й [1..3] элементы из полученного массива
  • присоединился к ним с разделителем "пробел"

вы можете захотеть использовать более гибкий метод и сначала конвертировать в [datetime] объект, а затем использовать .ToString() с вашим предпочтительным форматом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...