Если вам важен только подсчет пробелов, вы можете использовать -Split
и сопоставлять с ^\s
:
$NumberOfSpaces = ($line -Split "( )" -Match "^\s").Count
Однако, если вы должны использовать регулярное выражение, следующее регулярное выражение захватит все ваши примеры:
[regex]$exp = '\$([\/\w-]+(\s*))+'
Если вы хотите сопоставленный текст и сумму пробелов, вы можете использовать:
$MatchedText = $exp.Match($line).Value
$NumberOfWhiteSpaces = ($exp.Match($line).Groups[2].Captures.Length | Measure-Object -Sum).Sum
Объяснение:
.Groups[2]
перечисляет каждый \s*
захват. Свойство .Length
указывает, сколько пробелов было найдено в каждом совпадении. В ваших примерах свойство возвращает 1 или 0.
Если количество последовательных пробелов не имеет значения, регулярное выражение может быть проще: \$[\/\w-\s]+
. Это, однако, теряет группы захвата.