使用短语拆分C#中的字符串

使用短语拆分C#中的字符串,c#,C#,我有这样一个字符串: Phrase-No: 1 Lorem ipsum dolor sit amet, consectetur adipiscing elit Phrase-No: 2 Lorem ipsum dolor sit amet, consectetur adipiscing elit 我想把它分成这样一个列表: Phrase-No: 1 Lorem ipsum dolor sit amet, consectetur adipiscing elit Phrase-No: 2 Lore

我有这样一个字符串:

Phrase-No: 1 Lorem ipsum dolor sit amet, consectetur adipiscing elit Phrase-No: 2 Lorem ipsum dolor sit amet, consectetur adipiscing elit
我想把它分成这样一个列表:

Phrase-No: 1 Lorem ipsum dolor sit amet, consectetur adipiscing elit
Phrase-No: 2 Lorem ipsum dolor sit amet, consectetur adipiscing elit

我怎么能用C#做到这一点?我的问题是,我不知道字符串中会有多少短语No

尝试使用
string.Split()
拆分字符串的文档

或使用 正则表达式SPLIT

使用代码

string[] sentences = Regex.Split(input, @"(?<=[\.!\?])\s+");

foreach (string sentence in sentences) {
  Console.WriteLine(sentence);
}

你可以使用正则表达式。看起来很复杂,但当你需要经常处理文本时,它是值得学习的

string foo = "Phrase-No: 1 Lorem ipsum dolor sit amet, consectetur adipiscing elit Phrase-No: 2 Lorem ipsum dolor sit amet, consectetur adipiscing elit";
// Split after every char = ".", but only when I look ahead in the string (?=   ) and see "Phrase-No: <digit>"  
string[] bar = Regex.Split(foo, @".(?=Phrase\-No: \d)");
string foo=“短语编号:1 Lorem ipsum door sit amet,concetetur adipiscing elite短语编号:2 Lorem ipsum door sit amet,concetetur adipiscing elit”;
//在每个char=“.”之后拆分,但仅当我向前看字符串(?=)并看到“短语编号:”
字符串[]bar=Regex.Split(foo,@“(=短语\-No:\d)”);

一个选项是使用
字符串。拆分

var phrases = s.Split("Phrase-No: ");

foreach(var phrase in phrases) Console.WriteLine(phrase);
这将产生:

1 Lorem ipsum dolor sit amet, consectetur adipiscing elit 
2 Lorem ipsum dolor sit amet, consectetur adipiscing elit
如果您希望捕捉数字和短语,则Regex可在此提供帮助:

// [ ]* is to remove the extra space in after each phrase
string pattern = @"[ ]*Phrase-No: ([0-9]+) ";

//Because our string starts with the pattern the first match will be ''
var found = Regex.Split(s, pattern).Skip(1).ToList();

for(int i=0; i < found.Count(); i+=2) Console.WriteLine($"String {found[i]} is '{found[i+1]}'");

作为一个人你是怎么做的?你是在寻找“短语No:”?然后用同样的方法做。除此之外,您已经有了一个词:非常直观,不是吗?您提到了一个方法,使用了一个完全不同的方法链接到String.Split()然后使用Regex.Split()不匹配。在这里使用正则表达式太过分了。正则表达式是什么意思?这个正则表达式怎么能去掉“短语No:”?您可以使用其中任何一个。使用
.Split(“短语No:”)
即可获得相同的结果。不过,期望的结果包括短语No:,这意味着不能只使用简单的
拆分或此正则表达式。您不需要
。@PanagiotisKanavos使用了数百次,但从未想过要省略点测试,您需要点,否则索引0处还有一个空元素。有了点,它在第一个字符后开始分裂。在第一个字符之前没有。
// [ ]* is to remove the extra space in after each phrase
string pattern = @"[ ]*Phrase-No: ([0-9]+) ";

//Because our string starts with the pattern the first match will be ''
var found = Regex.Split(s, pattern).Skip(1).ToList();

for(int i=0; i < found.Count(); i+=2) Console.WriteLine($"String {found[i]} is '{found[i+1]}'");
String 1 is 'Lorem ipsum dolor sit amet, consectetur adipiscing elit'
String 2 is 'Lorem ipsum dolor sit amet, consectetur adipiscing elit'