Соответствие регулярному выражению для dir с датой в нем не дает результатов $ 1, $ 2, $ 3 - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь использовать регулярное выражение с powershell для извлечения года, месяца и дня из имени каталога. По какой-то причине я могу сказать, что получаю совпадение с -match, но когда я пытаюсь получить месяц, день и год с помощью [regex] :: Matches, я не могу получить совпадения.

      $temp = "toLocRobo_2019-01-30"
      $regex = [regex]::Matches($temp,'([0-9]+)-([0-9]+)-([0-9]+)')
      write-output $1 $2 $3  #$1, $2, and $3 are empty
      if($temp -match '([0-9]+)-([0-9]+)-([0-9]+)') { 
         write-output $1 $2 $3 #cursor gets to here so it matches, but $1, $2, and $3 are empty
      }

Я смотрел на совпадения powershell datestring и регулярное выражение powershell , но это немного отличается, и я не уверен, почему он не работает. Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Где заполнены переменные $ 1, $ 2 и $ 3?

Ваше регулярное выражение работает нормально, см. Этот код:

$temp = "toLocRobo_2019-01-30"
$regex = [regex]::Matches($temp, '([0-9]+)-([0-9]+)-([0-9]+)')
$regex.groups[0].value
$regex.groups[1].value
$regex.groups[2].value
$regex.groups[3].value
0 голосов
/ 16 января 2019

Вы должны использовать $1 и т. Д. При выполнении действий замены. Чтобы просто сопоставить дату, я бы сделал что-то вроде этого:

$temp = "toLocRobo_2019-01-30"

# using named groups
if ($temp -match '(?<year>\d{4})-(?<month>\d{1,2})-(?<day>\d{1,2})') {
    Write-Output ("year: {0}, month: {1}, day: {2}" -f  $matches['year'],$matches['month'],$matches['day'])
}

# using numbered groups
if ($temp -match '(\d{4})-(\d{1,2})-(\d{1,2})') {
    Write-Output ("year: {0}, month: {1}, day: {2}" -f  $matches[1],$matches[2],$matches[3])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...