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;
我该怎么做?
答案 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();
我得到以下结果:
我不知道您是否想要保留**
- 您的问题并不清楚。将RegEx更改为@"\*\*xy\*\*"
将删除**
。
答案 3 :(得分:0)
如何简单地从索引1开始循环throgh数组并添加&#34; xy&#34;每个条目的字符串?
或者实现您自己的分割版本,以便按照您想要的方式剪切字符串。
Yeat另一个解决方案是匹配&#34; xy *&#34;以非贪婪的方式,你的数组将是所有匹配的列表。根据语言,这可能不会被称为分裂BTW。