Вопрос:

Подсчитать количество строк в строке?

string powershell

30202 просмотра

7 ответа

1653 Репутация автора

Как бы вы посчитали количество строк в строке, используя Powershell?

Например:

$a = "blah test <= goes here / blah test <= goes here / blah blah"

Я хочу посчитать, сколько раз <= goes here /появляется в приведенном выше.

Автор: JBurace Источник Размещён: 15.03.2013 07:08

Ответы (7)


2 плюса

22870 Репутация автора

Вы можете использовать [.NET String.Split][1]метод перегрузки, который принимает массив строковых объектов, а затем подсчитывает, сколько разделений вы получите.

($a.Split([string[]]@('<= goes here /'),[StringSplitOptions]"None")).Count - 1

Обратите внимание, что вы должны преобразовать искомую строку в строковый массив, чтобы убедиться, что вы получили правильную Splitперегрузку, а затем вычесть 1 из результата, потому что split вернет все строки, которые окружают вашу строку поиска. Также важна опция «None», которая заставит Split возвращать нулевые строки в массиве (которые вы можете посчитать), если ваша строка поиска возвращается в начале или в конце.

Автор: zdan Размещён: 15.03.2013 07:23

5 плюса

52255 Репутация автора

Используя регулярное выражение:

$a = "blah test <= goes here / blah test <= goes here / blah blah"
[regex]$regex = '<= goes here /'
$regex.matches($a).count
2
Автор: mjolinor Размещён: 15.03.2013 07:32

24 плюса

46562 Репутация автора

Решение

другим способом (похожим на @mjolinor) в одной строке:

([regex]::Matches($a, "<= goes here /" )).count
Автор: CB. Размещён: 15.03.2013 08:37

2 плюса

135 Репутация автора

У меня была веревка с кучей трубок. Я хотел знать, сколько их было, поэтому я использовал это, чтобы получить это. Просто по-другому :)

$ExampleVar = "one|two|three|four|fivefive|six|seven";
$Occurrences = $ExampleVar.Split("|").GetUpperBound(0);
Write-Output "I've found $Occurrences pipe(s) in your string, sir!";
  • Маркус
Автор: BeastianSTi Размещён: 20.03.2015 10:30

0 плюса

94 Репутация автора

Просто чтобы расширить на BeastianSTI 'отличный ответ:

Нахождение максимального количества разделителей, используемых в строке файла (строка неизвестна во время выполнения):

$myNewCount = 0
foreach ($line in [System.IO.File]::ReadLines("Filename")){
    $fields = $line.Split("*").GetUpperBound(0);
    If ($fields -gt $myNewCount)
    {$myNewCount = $fields}
}
Автор: Charlie K Размещён: 19.10.2015 06:49

0 плюса

537 Репутация автора

Еще один альтернативный лайнер: (Select-String "_" -InputObject $a -AllMatches).Matches.Count

Автор: Stoinov Размещён: 28.08.2018 06:46

0 плюса

453 Репутация автора

Я удивлен, что никто не упомянул -splitоператора.

Для совпадения с учетом регистра выберите -cSplitоператор, поскольку -split/ -iSplitоба регистрозависимы.

PS Y:\Power> $a = "blah test <= goes here / blah test <= goes here / blah blah"

# $a -cSplit <Delimiter>[,<Max-substrings>[,"<Options>"]]
# Default is RegexMatch (makes no difference here):
PS Y:\Power> ($a -cSplit '<= goes here /').Count - 1
2

# Using 'SimpleMatch' (the 0 means return no limit or return all)
PS Y:\Power> ($a -cSplit '<= goes here/',0,'simplematch').Count - 1
2
Автор: YenForYang Размещён: 11.08.2019 07:35
Вопросы из категории :
32x32