2011-11-20 15 views
5

Używam Regex.Split(), aby wprowadzić dane użytkownika i zamienić je w pojedyncze słowa na liście, ale w momencie, gdy je usunie, chcę je zachować białe spacje.Zdanie Regex.Split() do słów przy zachowaniu odstępów.

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

Jak/gdzie chcesz zachować białe znaki? Na przykład, w jaki sposób ma się dzielić ciąg '' foo bar "? – BoltClock

Odpowiedz

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()); 

To daje 4 dzieli każdy ma wszystkie spacje zachowane.

(?=\s+) 

Środki są rozdzielane od miejsca, w którym przed sobą są spacje. Ale jeśli użyjesz tego samodzielnie, utworzy 15 spacji na przykładowym tekście, ponieważ po każdym spacji następuje kolejne spacja w przypadku wielokrotnych spacji.

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

Oznacza to podział z punktu, który ma znak spacji przed nim i ma spacje przed nim.

Jeśli tekst zaczyna się od miejsca i chcesz, aby być ujęte w pierwszym ułamku bez tekstu następnie można zmodyfikować wyrażenie następujące

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

co oznacza serię przestrzeni trzeba mieć non przestrzeń znak przed nim LUB początek ciągu.

+0

To doskonale, dziękuję bardzo. – Joel

+0

Goooooooooooooooooooooooooooood! +1 –

0

Zgaduję, że niektóre "słowa", którymi jesteś zainteresowany, są w rzeczywistości zwrotami, w których spacje są akceptowalne. Nie można łatwo użyć znaku spacji jako ogranicznika fraz i dopuszczalnego znaku w obrębie samej frazy. Spróbuj użyć przecinka jako separatora zamiast:

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

Ta wersja regex pozwala spacje po przecinkami:

string updatedLine = "user, input, two words, even three words"; 
string[] newInput = Regex.Split(updatedLine, @",\s+|,"); 
Powiązane problemy