2011-05-09 66 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