2013-03-20 2 views
3

У меня есть строка, где ее значение должно быть разделено разделителем строк. Например, мой разделитель «at», я хочу разделить только строковое значение с помощью точного ключевого слова «at». Ниже приведено значение строки образцаC# Split by String [] Совместим с разделителем Точное слово только

var sampleStr= "at Metadata at quota at what at batter"; 

Если я использую приведенный ниже код, слова с «at» в них также разделены.

var result= sampleStr.Split(new string[] { "at" }, StringSplitOptions.None); 

Результат, который я хочу, представляет собой массив, который в сочетании будет «Метаданные квоты».

Пожалуйста, помогите.

+0

Изменить вашу строку, чтобы быть 'atMetadataatquotaatwhatatbatter' или изменить разделитель, чтобы быть' «на» ' включая пробелы. Или, если пробелы не важны, вызовите 'Trim()' перед разбиением – DGibbs

+0

@DGibbs Я не могу их изменить. Мое примерное значение строки - это всего лишь образец, но мои фактические данные - это StackTrace исключения. Таким образом, я не думаю, что это решение. Примерно несколько строк в System.Collections.Generic.List'1 ..ctor (коллекция IEnumerable'1) \ r \ n в System.Linq.Enumerable.ToList [TSource] (источник IEnumerable'1) \ r \ n в –

+0

Если шаблон всегда «[...] \ r \ n в [...] ", вы не могли бы просто разделить на" \ r \ n at "? – Smallhacker

ответ

1
splitted = Regex.Split(text,@"\bat\s*\b"); 

\ b обозначает любую границу слова. \ s * будет соответствовать символам пробела после «at».

splitted : string [] = [|""; "Metadata "; "quota "; "what "; "batter"|] 

Если не нужно пустое пространство попробуйте, как показано ниже ...

List<string> splitted = Regex.Split(phrase, @"\bat\s*\b",StringSplitOptions.RemoveEmptyEntries); 

splitted : string [] = [| "Metadata "; "quota "; "what "; "batter"|] 
+0

Если вы хотите его игнорировать, вы можете использовать эту перегрузку http://msdn.microsoft.com/en-us/library/byy2946e.aspx и применить RegexOptions.IgnoreCase –

+0

спасибо за помощь! –

0

На это нет надежного решения, так как это очень язык и ваша строка может быть специфичной для конкретной структуры.

Чтобы сделать это проще вы можете думать о расщеплении на " at " (at с пробелами в передней и задние), но это не будет reolve всех возможных проблем, кстати.

Пример:

"I was loooking at the tree", потерпит неудачу, так как «в» здесь не разделители, но слово внутри реальной фразы.

3

Возможно:

IEnumerable<string> wordsWithoutAt = sampleStr.Split() 
    .Where(w => !StringComparer.OrdinalIgnoreCase.Equals(w, "at")); 
string result = string.Join(" " , wordsWithoutAt); 

Demo

Если дело случая заменить StringComparer.OrdinalIgnoreCase часть с != "at".

0

Вы должны использовать окружающую пробельных ....

Прежде всего, обернуть исходный текст в какой-то пробел, чтобы справиться с «на» в начале и/или конце:

sampleStr = " " + sampleStr + " "; 

Тогда вы разделились следующим образом:

var result = sampleStr.Split(new string[] { " at " }, StringSplitOptions.RemoveEmptyEntires); 

Тогда у вас есть результат, который вы хотите.