2015-10-22 6 views
2

Скажем, у меня есть строкаРазбивает строку с конкретными требованиями

string Song = "The-Sun - Is Red"; 

Мне нужно разбить его от «-» гольца, но только если символ до и после того, как пространство.

Я не хочу, чтобы он разбивался на тире «The-Sun», а на черточке «Солнце - это».

код я использую для разделения был

string[] SongTokens = Song.Split('-'); 

Но это, очевидно, распадается на первом я считаю. Мне нужно только, чтобы разделить, если это имеет место до и после «-»

Благодарности

ответ

3

мне нужно разделить его от «-» гольца, но только если символ до и после того, как это пространство.

Вы можете использовать не регулярки решение так:

string[] SongTokens = Song.Split(new[] {" - "}, StringSplitOptions.RemoveEmptyEntries); 

Результат:

enter image description here

Посмотреть более подробную информацию о String.Split Method (String[], StringSplitOptions) в MSDN. Первым аргументом является separator, которые представляют собой строковый массив , который ограничивает подстроки в этой строке, пустой массив, который не содержит разделителей, или null.

StringSplitOptions.RemoveEmptyEntries удаляет все пустые элементы из результирующего массива. Вы можете использовать StringSplitOptions.None, чтобы сохранить пустые элементы.

Однако может возникнуть проблема, если у вас есть жесткое пространство или обычное пространство на обоих концах. Тогда, вы бы лучше выбрать регулярное выражение решение так:

string[] SongTokens = Regex.Split(Song, @"\p{Zs}+-\p{Zs}+") 
      .Where(x => !String.IsNullOrWhiteSpace(x)) 
      .ToArray(); 

\p{Zs}+ шаблон соответствует любому Unicode «горизонтальный» пробел, 1 или более вхождений.

2
string[] SongTokens = Song.Split(new string[] {" - "}, StringSplitOptions.None); 
+1

Спасибо! Я бы поставил вас в качестве ответа, но пользователь над вами подробно остановился, но ваш код также отлично работает! – Pops

Смежные вопросы