Как получить несколько групп захвата регулярных выражений - PullRequest
1 голос
/ 09 апреля 2020

Я пытаюсь получить доступ ко всем совпадениям моей первой группы захвата ([^ ]+) в массиве, чтобы я мог foreach, но я не вижу его в выводе:

$input = "Row 1:
Computer: xxx
Last Heartbeat: 4/9/2020 11:27:24 AM

Row 2:
Computer: yyy
Last Heartbeat: 4/9/2020 11:27:37 AM"

$matches = ([regex]'Computer: ([^ ]+)').Matches($input)
$matches

Выход :

Groups   : {0, 1}
Success  : True
Name     : 0
Captures : {0}
Index    : 7
Length   : 13
Value    : Computer: xxx

Groups   : {0, 1}
Success  : True
Name     : 0
Captures : {0}
Index    : 66
Length   : 13
Value    : Computer: yyy

Правда, мне нужно многое узнать о структурах данных и способах доступа к ним.

1 Ответ

4 голосов
/ 09 апреля 2020

Прежде чем мы перейдем к реальному ответу, рассмотрите возможность переименования ваших переменных - $Matches и $Input являются автоматизированными c и могут быть перезаписаны средой выполнения .


Чтобы получить значение первой группы захвата, вам нужно обратиться к индексу 1 в свойстве Groups или индексу 0 в свойстве Captures каждого совпадения:

$string = "Row 1:
Computer: xxx
Last Heartbeat: 4/9/2020 11:27:24 AM

Row 2:
Computer: yyy
Last Heartbeat: 4/9/2020 11:27:37 AM"

$results = ([regex]'Computer: ([^ ]+)').Matches($string)
$results | ForEach-Object { $_.Groups[1].Value }
# or 
$results | ForEach-Object { $_.Captures[0].Value }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...