C# 使用C进行字符串拆分#

C# 使用C进行字符串拆分#,c#,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." re

我有以下字符串:

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."

有什么办法我能做到吗?

句子中可能也有数字吗

因为我不知道你的格式,你已经说过你不能在下线/新线上做,我会尝试像

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.Count > 0 ? lines[0] : "";
这是一个很大的假设,在给定的句子中,你不会有下一行的数字ID(即句子2不会包含数字3)

如果这无助于提供原始格式的输入(如果没有换行符,则不要添加换行符)


编辑:修复了我的代码(错误变量对不起)

您可以在“.”字符上拆分,并从结果数组中删除任何小于2个字符的内容

当然,这取决于这样一个事实,即除了数字指示符之外,您没有1个字符的数据点,如果是这种情况,您还可以将其作为数字值进行检查


这个答案也会从你的句子中去掉一个句号,所以你必须把它加回去。有很多的操作,但这节省了你必须阅读每个字符和决定它独立

这是最简单的方法:

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

希望这有帮助;)

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

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

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

请解释:“因为不是那样。”您希望如何分割以下
1。第一行2。第二个数字是2。2.第三行
我想他的意思是一句话可能会溢出到另一行。希望句子至少仍然以换行符结尾,在这种情况下,我们真正寻找的是以数字开头,后跟句点和空格的行。但我想在我提供答案之前确认这一点,我还想知道他是否想保留句子编号。它们是由回车分隔的还是可能是“1.这是第一句。2.这是第二句。3.这是第三句。”你可以用正则表达式来检查数字,然后是小数,但是如果“3”在句子的中间,它就会断开。我已经更新了我的问题。亲爱的,我不能理解你的逻辑。我想要的是:string1=1。这是第一句话,string2=2。这是第二个句子,依此类推。@fawad,请参见编辑,了解如何访问函数后面的每个句子,或者可以使用@“\d+\”作为模式,其中\d是匹配数字的快捷方式。@Zannjaminderson:事实并非如此:
\d
匹配任何unicode数字()。例如,这个字符
\d
,code>将被拆分,但如果您使用
[0-9]
,则不会被拆分。感谢您的澄清-这是一个有趣的问题-不确定在这种情况下是否会有问题,但肯定值得理解。@Zannjaminderson:我同意那些“特殊”字符(不是我们习惯的阿拉伯数字)至少可以说是相当罕见的。但遗憾的是,所有正则表达式备忘单都表明
\d等同于[0-9]
:)同意,谢谢你让我明白这一点。诅咒你撒谎的regex备忘单!如果您开始遇到正则表达式与您不希望它匹配的特殊字符匹配的情况,那肯定会使
\d
成为一个相当容易泄漏的抽象……我并不总是创建数组,但创建数组时至少要包含10000个项。
String[] result = Regex.Split(text, @"[0-9]+\. ");
int index = 1; 
String[] result = Regex.Split(text, @"[0-9]+\. ").Where(i => !string.IsNullOrEmpty(i)).Select(i => (index++).ToString() + ". " + i).ToArray();