使用C#拆分字符串

时间:2011-10-19 14:08:02

标签: c#

我有以下字符串:

string text = "1. This is first sentence. 2. This is the second sentence. 3. This is the third sentence. 4. This is the fourth sentence."

我想根据1. 2. 3.等等分割它:

result[0] == "This is first sentence."
result[1] == "This is the second sentence."
result[2] == "This is the third sentence."
result[3] == "This is the fourth sentence."

我有什么方法可以做到这一点C#?

5 个答案:

答案 0 :(得分:7)

假设您的句子中不会遇到这样的模式:X.(一个整数,后跟一个点,后跟一个空格),这应该可行:

String[] result = Regex.Split(text, @"[0-9]+\. ");

答案 1 :(得分:1)

句子中也可能有数字吗?

由于我不知道你的格式化,你已经说过你不能在EOL / New Line上做我会尝试像......

List<string> lines = new List<string>();
string buffer = "";
int count = 1;

foreach(char c in input)
{
   if(c.ToString() == count.ToString())
   {
      if(!string.IsNullOrEmpty(buffer))
      {
         lines.Add(buffer);
         buffer = "";
      }
      count++;
   }
   buffer += c;
}

//lines will now contain your splitted data

然后您可以像这样访问每个句子......

string s1 = lines[0];
string s2 = lines[1];
string s3 = lines[2];

重要提示:确保在获得句子之前检查行数...

string s1 = lines.Count > 0 ? lines[0] : "";

这假设您不会在给定的发送中使用下一行号码ID(即句子2不包含数字3)

如果这对您提供原始格式的输入没有帮助(如果没有则不添加换行符)

编辑:修正了我的代码(错误的变量抱歉)

答案 2 :(得分:1)

int index = 1; 
String[] result = Regex.Split(text, @"[0-9]+\. ").Where(i => !string.IsNullOrEmpty(i)).Select(i => (index++).ToString() + ". " + i).ToArray();

结果将包含您的句子,包括“行号”。

答案 3 :(得分:0)

你可以拆分'。' char并从结果数组中删除小于2个char的任何内容。

当然,这依赖于这样一个事实:除了数字指示器之外你没有1个字符的数据点,如果是这种情况你也可以将它作为数值检查。

这个答案也会从你的句子中删除一段时间,所以你必须重新加入。有很多操作但是这可以让你不必阅读每个字符并独立决定它。

答案 4 :(得分:0)

这是最简单的方法:

    var str = "1. This is first sentence." +
              "2. This is the second sentence." +
              "3. This is the third sentence." +
              "n. This is the nenth sentence";
    //set your max number e.g 10000
    var num = Enumerable.Range(1, 10000).Select(x=>x.ToString()+".").ToArray(); 
    var res=str.Split(num ,StringSplitOptions.RemoveEmptyEntries);

希望这个帮助;)