2015-03-07 3 views
0

Дана строка х, например: (.) ​​Извлечение подгруппы строки

var str = "This is the paragraph1. This is the paragraph2. This paragraph has not period"; 

Я хочу, чтобы извлечь только пункты, которые заканчиваются периодом

Это мой код:

var paragraphs = str.Split(new[] {'.'}, StringSplitOptions.RemoveEmptyEntries); 

Почему результат состоит из 3-х предметов, а не 2-х предметов?

ул может быть переменной

В этом случае:

var str = "This is the paragraph1. This is the paragraph2. This paragraph3."; 

Результат должен быть 3 шт

+0

Я думаю, что правильный синтаксис должен быть 'new [] {'.'}'. В каком результате мы говорим точно? Это 'paragraphs.Length'? –

+0

Каков ваш ожидаемый результат? –

+0

К сожалению, результат равен 3 или 2 элементам в массиве –

ответ

0

Похоже, что вы хотите извлечь только пункт 1 и 2.

@"(?<=\.|^)[^.]*\." 

Код:

String input = @"This is the paragraph1. This is the paragraph2. This paragraph has not period"; 
Regex rgx = new Regex(@"(?<=\.|^)[^.]*\."); 
foreach (Match m in rgx.Matches(input)) 
Console.WriteLine(m.Groups[0].Value); 

IDEONE

2

Почему результат 3 пунктов и не является 2 пунктов?

Вот так string.Split() работ. Он разделяет строку в каждой точке, где он находит данный разделенный текст, который вы предоставляете. В вашей строке — есть две такие точки, т. Е. Два периода —, и поэтому строка разделяется на два места.

Когда вы разделяете что-то в двух местах, вы получаете три части. Таким образом, три части возвращаются вам.

Если вам нужен только текст, который заканчивается в определенный период времени, вам нужно использовать другой алгоритм. Одна из возможностей состоит в том, чтобы просто не использовать параметр StringSplitOptions.RemoveEmptyEntries и игнорировать последний элемент в возвращаемом массиве.

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