我有以下字符串:
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#?
答案 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);
希望这个帮助;)