2011-05-09 79 views
1

這是一個非常簡單的問題。如果我有一個字符串,需要分隔多個字符,那麼「正確」或最簡單的方法是什麼。我可以考慮如何使用正則表達式,但是有更簡單的方法。我一直在做這樣的,我覺得這是一個真正的黑客:C#通過多個字符簡單分割字符串

text = text .Replace("\r\n\r\n", "~"); 
text = text .Replace("\n\n", "~"); 

string[] splitText = text.Split('~'); 

應該不是真正的問題是什麼原始的字符串包含但它會是這樣的:

sometext \ r \ nsomemoretext \ r \ n \ r \ nsometext2 \ r \ n \ r \ nfinalbitoftext

分割應返回{somtext \ r \ nsomemoretext,sometext2,finalbitoftext

注意:大塊文本可以包含\ r \ n,只是從來沒有兩個在一起。

+0

能告訴你handsText的原始值的例子嗎? (你想分割的字符串)? – keyboardP 2011-05-09 18:27:22

回答

0

我會使用:

var splitted = Regex.Split(input, "(\r\n){2,}|\n{2,}|\r{2,}", RegexOptions.ExplicitCapture); 

這是對行中的任意兩個(或更多)換行分裂。

(請注意,使用(\r\n)|\n|\r){2,}不會因爲工作,然後爲 「\ r \ n」 個計數爲兩個換行符。)

例子:

  • 輸入sometext \ r \ nsomemoretext \ r \ n \ r \ nsometext2 \ r \ n \ r \ nfinalbitoftext
  • 輸出{sometext \ r \ nsomemoretext,sometext2,finalbitoftext}
1

使用正則表達式來Split它:

Regex regex = new Regex("~+"); 
string[] hands = regex.Split(handsText); 

這是很好的使用靜態形式,如果你只需要它飄飛。如果你經常使用它,比如在一個循環中,使用實例形式(上面)是很好的。

同樣,您可以使用正則表達式更容易地替換\ n \ n和\ r \ n \ r \ n。

// note: using static version; above note applies here as well 
String replaced = Regex.Replace(value, "(\r\n\r\n|\n\n)+", "~"); 
2

這應做到:

char[] delim = {'\r','\n'}; 
var splitString = str.Split(delim, StringSplitOptions.RemoveEmptyEntries); 

編輯:

嘗試使用string[]分隔符,而不是隨後,以確保兩個\r\n字符匹配。試試下面的代碼:

string[] delims = { "\r\n\r\n" }; 
var splitString = str.Split(delims, StringSplitOptions.RemoveEmptyEntries); 
+0

當它看到一個單獨的\ r \ n時會發生分裂 – 2011-05-09 18:40:17

+0

您的意思是例如「一大塊文本\ r \ n一些大文本」嗎?如果是這樣,那麼是的,它應該。 – keyboardP 2011-05-09 18:41:31

+0

文本的大塊可以包含新行,所以這不起作用。 – 2011-05-09 21:48:13