Используйте строку из регулярного выражения для форматирования даты и времени - PullRequest
0 голосов
/ 29 июня 2018

Что я хотел бы сделать, это использовать powershell для анализа файла и замены определенных ключевых слов в файле значениями. Это работает, но у меня проблема с форматированием даты и времени с использованием захваченной группы регулярных выражений. Файл, который я анализирую, содержит следующий текст:

$ DATETIME $
$ DATETIME = YYYY-MM-DDThh: мм: sszzz $
$ DATETIME = гггг $

У меня есть скрипт powershell, который извлекает ключевое слово DATETIME и фиксирует предоставленный формат. Всякий раз, когда я пытаюсь использовать захваченный формат, он терпит неудачу, потому что (я подозреваю) захваченная строковая переменная $ 1 используется как строка формата, а не значение $ 1.

Get-Content $inputfile) `
    -replace '\$DATETIME[=]?(.*)\$', $(Get-Date -Format '$1') `
| Set-Content $outputfile

Если кто-нибудь может помочь, я буду признателен.
Спасибо

1 Ответ

0 голосов
/ 29 июня 2018

Вам необходимо передать значение соответствия в метод обратного вызова или использовать его как

PS> $s = '$DATETIME=yyyy-MM-ddTHH:mm:sszzz$'
PS> [regex]::Replace($s,'\$DATETIME=?([^$]*)\$', {param($match) $(Get-Date -Format $match.Groups[1].Value) })
DATETI6E=2018-06-29T15:09:30+02:00

'$1' в исходном решении передается Get-Date в виде буквенной строки $1 и, таким образом, не работает должным образом. Эти замещающие обратные ссылки могут использоваться только в шаблонах замены строк, но не могут использоваться, когда сопоставление требует дальнейших манипуляций.

Обратите внимание, что я немного изменил шаблон для соответствия:

  • \$ - $ символ
  • DATETIME - буквальная подстрока
  • =? - 1 или 0 = символов
  • ([^$]*) - Группа 1 (указанное здесь значение будет использоваться для генерации строки даты и времени): любые 0+ символов, кроме $ (если в одной строке более 1 совпадений, она все равно будет работать и он будет соответствовать быстрее, чем жадный (или даже ленивый) точечный шаблон)
  • \$ - $ char
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...