Разделение метода разбиения на строку, включающую пробелы - PullRequest
0 голосов
/ 10 октября 2018

Извиняюсь, если это очевидно, но я пробовал так много вещей, чтобы заставить это работать ... В VB (с которым я более знаком), я считаю, что это будет хорошо.

Я пытаюсь разбить строку с разделителем е "-".Пробелы имеют решающее значение, так как в любом месте строки есть '-', но их не следует разделять.

"This-string - contains - some-hyphens".Split(' - ')

Это должно (в моем мозгу) возвращать 3 элемента:

This-string
contains
some-hyphens

К сожалению, я получаю 9+ элементов в зависимости от того, как я играю по методу Split.

This
string


contains


some
hyphens

Он явно разделяется только на -, но, похоже, тожеразбиение на пробелы и игнорирование формата ' - '.

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      17134  228

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

То, что происходит, это его разделение на основе набора символов.Так что "-" похоже на разделение ("", "-").

В powershell вы можете использовать -split.-Split обрабатывает его как полную строку "-"

"This-string - contains - some-hyphens" -split " - "
0 голосов
/ 10 октября 2018

Перегрузка метода String.Split, которую вы используете , принимает char[], так что powershell хорош и разделяет вашу строку для вас.Если вы хотите использовать строку, вам нужно передать StringSplitOptions:

'This-string - contains - some-hyphens'.Split((,' - '), [StringSplitOptions]::RemoveEmptyEntries)

При тестировании мне нужно было использовать оператор унарного массива ,, чтобы заставить синтаксический анализатор использовать правильную перегрузку.


Более мощный способ, подобный PowerShell, заключается в использовании оператора -split, который работает с использованием регулярных выражений:

'This-string - contains - some-hyphens' -split ' - '
0 голосов
/ 10 октября 2018

Когда вы предоставляете ему метод .split, он разделяется на любой символ в наборе, который вы предоставляете.Это означает, что ваши результаты будут разделены либо пробелом, либо дефисом.

Если вы используете -split, ввод будет обрабатываться как строка, а не как набор символов.

Давайте посмотрим например (приведенный ниже)

$foo = "This-string - contains - some-hyphens"
$bar = $foo -split(' - ')
$bar

Вывод ниже:

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