2013-06-14 3 views
0

У меня есть предложение, как это:Stringifying пространства с рег выражения

"Hey what is up 

Обратите внимание на два пробела после Hey.

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

string[] tokensArr = Regex.Split(data, "()"); 

Теперь, для меня важно, чтобы каждое пространство в виде отдельной строки тоже. Но случается так, что если я вставляю больше одного места в строке, split возвращает 3 строки пространства, а не 2 (с 3 пробелами в строке, которые он возвращает 5 и т. Д.). Дополнительный в отладчике выглядит так: "", а не " ". Почему он вставлен? Как я могу избавиться от него, оставаясь только с теми пространствами, которые я фактически вставил?

Для того, чтобы понять, снова: Мое намерение не фильтровать двойной/тройной spaces.But, чтобы избавиться от дополнительного пространства я получаю при разбиении them.Just попробовать:

Введите текст с двойным пространством между 2 words.Run его с помощью метода выше, и вы видите раскол возвращает вместо 2 пунктов пространств 3.

+0

Что-то типа '' \ s + "' приходит на ум, то есть один или несколько символов пробелов. – Jodrell

ответ

2

Say, вы имели запятые вместо пробелов

Hey,,what,is,up 

Это выглядит как CSV вход с полями

"Hey" 
"" 
"what" 
"is" 
"up" 

не так ли? Поэтому, если вы разделите на ,, вы ожидаете получить пустую строку. Если вы разделите на (,), чтобы захватить разделители, вы все равно ожидаете, что это будет. То же самое происходит, если вы делаете это с пробелами.

Таким образом, единственный вариант, который у вас есть, - это пройти через ваш массив в конце и удалить пустые строки.

string[] tokensArr = Regex.Split(data, "()").Where(s => s != String.Empty).ToArray(); 

Это даст вам

"Hey", " ", " ", "what", " ", "is", " ", "up" 

Если вместо этого вы хотите иметь только одну строку, которая содержит оба пространства, не разделяется на отдельных пространств, но на одном или более- пробелов:

string[] tokensArr = Regex.Split(data, "([ ]+)") 

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

"Hey", " ", "what", " ", "is", " ", "up" 
+0

Отлично! То, что я искал. Спасибо. –

1

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

Другой способ думать об этом - если вы раскалываете слово на букву, скажите «a», тогда не было бы никакого «a» в любом из значений, возвращаемых из раскола. Если вы разделите по пробелам, в возвращаемых значениях не будет пробелов.

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