2011-11-20 11 views
5

Kullanıcı girişini alıp listedeki tek tek kelimelere dönüştürmek için kullanıyorum ama ekledikleri herhangi bir alanı kaldırdığı anda, bu özelliği tutmak istiyorum Regex.Split()10 beyaz boşluk.Beyaz boşlukları korurken kelimelere regex.Split() cümlesi

string[] newInput = Regex.Split(updatedLine, @"\s+"); 
+4

Boşluğu nasıl/nerede tutmak istiyorsunuz? Örneğin, '' foo bar '' dizgisi hangi bölüme ayrılmalı? – BoltClock

cevap

6
string text = "This   is some text"; 
var splits = Regex.Split(text, @"(?=(?<=[^\s])\s+)"); 

foreach (string item in splits) 
    Console.Write(item); 
Console.WriteLine(splits.Count()); 

Bu, her tüm önde gelen boşlukları olan 4 böler verecek korunmuş.

(?=\s+) 

Önceden boşlukların bulunduğu noktadan ayırma anlamına gelir. Ancak bunu tek başına kullanırsanız, örnek metin üzerinde 15 bölme oluşturacaktır, çünkü her alanın tekrarlanan boşluklarda başka bir boşlukla devam etmesi gerekir.

Bu, daha önce boşluk olmayan karaktere sahip olan bir noktadan ayırma ve önündeki boşluklara sahip olma anlamına gelir. Metin, uzaydan başlar ve bu o zaman alanların dizi anlamına

(?=(?<=^|[^\s])\s+) 

aşağıdaki ifadeyi değiştirebilir hiçbir metin ile ilk bölünme yakalanan istiyorsanız

olmayan bir alana sahip olmalısınız ondan önceki karakter VEYA dizenin başlangıcı.

+0

Bu mükemmel çok teşekkür ederim – Joel

+0

Goooooooooooooooooooooooooooood! +1 –

0

İlgilendiğiniz "kelimelerin" bazıları aslında alanların kabul edilebilir olduğu ifadelerdir. Boşluk karakterini, tümcecik bir ayırıcı ve deyim içinde izin verilen bir karakter olarak kolayca kullanamazsınız. yerine sınırlayıcı için virgül kullanmayı deneyin:

string updatedLine = "user,input,two words,even three words"; 
string[] newInput = Regex.Split(updatedLine, @","); 

regex bu sürümü virgülden sonra boşluk sondaki sağlar:

string updatedLine = "user, input, two words, even three words"; 
string[] newInput = Regex.Split(updatedLine, @",\s+|,"); 
İlgili konular