Если оператор, чтобы найти количество пробелов в строке и обнаружить регулярное выражение в соответствии с количеством - PullRequest
0 голосов
/ 04 июня 2019

Мне нужна помощь по сценарию PowerShell, чтобы найти количество пробелов в строке и определить регулярное выражение по количеству пробелов в строке, которые следует игнорировать.Это для инициализации веток TFS, которые я передаю как параметр сборки Jenkins.

Мой код:

git tfs branch -r | Out-File -FilePath ../Branches.txt

"List of remote branches of $reponame are below"

$text = Get-Content -Path ..\Branches.txt

foreach ($exp in $text) {
    [regex]$exp = "(\$[\/\w-]+\s[\/\w-]+\s[\/\w-]+)"
    [regex]$exp = "(\$[\/\w-]+\s[\/\w-]+\s[\/\w-]+\s[\/\w-]+\s[\/\w-]+)"
    [regex]$exp = "(\$[\/\w-]+)"
}

foreach ($line in $text) {
    $branch = $exp.Match($line).Value 

    "cloning $branch"

    git tfs branch --init $branch

    "done $branch"
}

Примеры строк:

$/External Websites/Main/ANI Mobile
$/Databases/Main/Business Intelligence/Database Projects/Sales Data Mart
$/Desktop/Main/BogusClassLibrary

1 Ответ

1 голос
/ 04 июня 2019

Если вам важен только подсчет пробелов, вы можете использовать -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]+. Это, однако, теряет группы захвата.

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