拆分字符串和字符串数组

时间:2015-12-24 01:44:44

标签: c# arrays regex string split

string s= abc**xy**efg**xy**ijk123**xy**lmxno**xy**opq**xy**rstz;

我希望输出为字符串数组,在" xy"处分割。我用了

  string[] lines = Regex.Split(s, "xy"); 

此处删除xy。我想要数组和xy一起。因此,在将字符串拆分为字符串数组后,数组应如下所示。

lines[0]= abc;
lines[1]= xyefg;
lines[2]= xyijk123;
lines[3]= xylmxno;
lines[4]= xyopq ;
lines[5]= xyrstz;

我该怎么做?

4 个答案:

答案 0 :(得分:3)

(?=xy)

您需要拆分0 width assertion。请参阅演示。

https://regex101.com/r/fM9lY3/50

string strRegex = @"(?=xy)";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"abcxyefgxyijk123xylmxnoxyopqxyrstz";

return myRegex.Split(strTargetString);

输出:

abc xyefg xyijk123 xylmxno xyopq xyrstz

答案 1 :(得分:2)

如果您未与Regex结婚,您可以制作自己的扩展方法:

public static IEnumerable<string> Ssplit(this string InputString, string Delimiter)
{
    int idx = InputString.IndexOf(Delimiter);
    while (idx != -1)
    {
        yield return InputString.Substring(0, idx);
        InputString = InputString.Substring(idx);

        idx = InputString.IndexOf(Delimiter, Delimiter.Length);
    }

    yield return InputString;
}

用法:

string s = "abc**xy**efg**xy**ijk123**xy**lmxno**xy**opq**xy**rstz";
var x = s.Ssplit("xy");

答案 2 :(得分:2)

这样做似乎相当简单:

string s = "abc**xy**efg**xy**ijk123**xy**lmxno**xy**opq**xy**rstz";

string[] lines = Regex.Split(s, "xy");

lines = lines.Take(1).Concat(lines.Skip(1).Select(l => "xy" + l)).ToArray();

我得到以下结果:

lines

我不知道您是否想要保留** - 您的问题并不清楚。将RegEx更改为@"\*\*xy\*\*"将删除**

答案 3 :(得分:0)

如何简单地从索引1开始循环throgh数组并添加&#34; xy&#34;每个条目的字符串?

或者实现您自己的分割版本,以便按照您想要的方式剪切字符串。

Yeat另一个解决方案是匹配&#34; xy *&#34;以非贪婪的方式,你的数组将是所有匹配的列表。根据语言,这可能不会被称为分裂BTW。