拆分带有加号的字符串作为分隔符

Tom*_*röm 4 c# string parsing split

我有一个包含加号(+)的字符串的问题.我想拆分该字符串(或者如果有其他方法来解决我的问题)

string ColumnPlusLevel = "+-J10+-J10+-J10+-J10+-J10";
string strpluslevel = ""; 
strpluslevel = ColumnPlusLevel; 
string[] strpluslevel_lines = Regex.Split(strpluslevel, "+");

foreach (string line in strpluslevel_lines)
{
    MessageBox.Show(line);
    strpluslevel_summa = strpluslevel_summa + line;
}   

MessageBox.Show(strpluslevel_summa, "summa sumarum");
Run Code Online (Sandbox Code Playgroud)

MessageBox用于我的测试目的.

现在...... ColumnPlusLevel字符串可以有非常多样的条目,但它始终是以加号开头的重复模式.即"+ MJ + MJ + MJ"或"+ PPL14.1 + PPL14.1 + PPL14.1"作为示例.(它来自另一个软件,我无法编辑该软件的输出)

如何找出重复的模式?在这个例子中,这是+ -J10或+ MJ或+ PPL14.1

在上面我的例子中,我通过仅使用MessageBox来测试它来显示结果,但我希望稍后将重复的模式存储在字符串中.

也许我使用Split做错了,也许有另一个解决方案.也许我以错误的方式使用Split.

希望你理解我的问题和我想要的结果.

谢谢你的建议.

/托马斯

Tim*_*ter 5

如何找出重复的模式?

也许我完全不理解这个要求,但不是那么容易:

string[] tokens = ColumnPlusLevel.Split(new[]{'+'}, StringSplitOptions.RemoveEmptyEntries);
string first = tokens[0];
bool repeatingPattern = tokens.Skip(1).All(s => s == first);
Run Code Online (Sandbox Code Playgroud)

如果repeatingPatterntrue你知道的模式本身first.

你能解释逻辑是如何工作的吗?

包含的行tokens.Skip(1)是LINQ查询,因此您需要using System.Linq在代码文件的顶部添加.既然tokensstring[]实现的,IEnumerable<string>您可以使用任何LINQ(扩展 - )方法.Enumerable.Skip(1)跳过第一个,因为我已经将其存储在一个变量中,我想知道所有其他是否相同.因此All,false只要一个项目与条件不匹配,我就会使用哪个返回(因此一个字符串与第一个字符串不同).如果全部相同,则您知道存在已存储在变量中的重复模式first.