C# 在2个子字符串之间拆分字符串而不删除分隔符
我有一根像C# 在2个子字符串之间拆分字符串而不删除分隔符,c#,wpf,string,delimiter,C#,Wpf,String,Delimiter,我有一根像 "<Canvas Background="#FF00FFFF" Name="Page_1" Width="1200" Height="900" ><TextBlock Name="PageTitle" /></Canvas><Canvas Background="#FF00FFFF" Name="Page_2" Width="1200" Height="900"><TextBlock Name="PageTitle" />&
"<Canvas Background="#FF00FFFF" Name="Page_1" Width="1200" Height="900" ><TextBlock Name="PageTitle" /></Canvas><Canvas Background="#FF00FFFF" Name="Page_2" Width="1200" Height="900"><TextBlock Name="PageTitle" /></Canvas>"
“”
我想把这个字符串分成一个数组
[< Canvas Background="#FF00FFFF" Name="Page_1" Width="1200" Height="900" >< TextBlock Name="PageTitle" />< /Canvas>],
[< Canvas Background="#FF00FFFF" Name="Page_2" Width="1200" Height="900">< TextBlock Name="PageTitle" />< /Canvas>]
[],
[]
但是当我使用
objectsAsStrings = contents.Split(new string[] { "/Canvas><Canvas" }, StringSplitOptions.None);
objectsassstrings=contents.Split(新字符串[]{”/Canvas>试试这个
string mailstring = "<Canvas Background='#FF00FFFF' Name='Page_1' Width='1200' Height='900' ><TextBlock Name='PageTitle' /></Canvas><Canvas Background='#FF00FFFF' Name='Page_2' Width='1200' Height='900'<TextBlock Name='PageTitle' /></Canvas>";
string splitor = "</Canvas>";
string[] substrings = mailstring.Split(new string[] { splitor }, StringSplitOptions.None);
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
for(int i=0;i<substrings.Lenght;i++)
{
substrings[i]+=splitor;
}
string mailstring=“试试这个
string mailstring = "<Canvas Background='#FF00FFFF' Name='Page_1' Width='1200' Height='900' ><TextBlock Name='PageTitle' /></Canvas><Canvas Background='#FF00FFFF' Name='Page_2' Width='1200' Height='900'<TextBlock Name='PageTitle' /></Canvas>";
string splitor = "</Canvas>";
string[] substrings = mailstring.Split(new string[] { splitor }, StringSplitOptions.None);
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
for(int i=0;i<substrings.Lenght;i++)
{
substrings[i]+=splitor;
}
string mailstring=“试试这个
string mailstring = "<Canvas Background='#FF00FFFF' Name='Page_1' Width='1200' Height='900' ><TextBlock Name='PageTitle' /></Canvas><Canvas Background='#FF00FFFF' Name='Page_2' Width='1200' Height='900'<TextBlock Name='PageTitle' /></Canvas>";
string splitor = "</Canvas>";
string[] substrings = mailstring.Split(new string[] { splitor }, StringSplitOptions.None);
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
for(int i=0;i<substrings.Lenght;i++)
{
substrings[i]+=splitor;
}
string mailstring=“试试这个
string mailstring = "<Canvas Background='#FF00FFFF' Name='Page_1' Width='1200' Height='900' ><TextBlock Name='PageTitle' /></Canvas><Canvas Background='#FF00FFFF' Name='Page_2' Width='1200' Height='900'<TextBlock Name='PageTitle' /></Canvas>";
string splitor = "</Canvas>";
string[] substrings = mailstring.Split(new string[] { splitor }, StringSplitOptions.None);
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
for(int i=0;i<substrings.Lenght;i++)
{
substrings[i]+=splitor;
}
string mailstring=“或者,您可以像这样使用XML解析器:
string xml = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
xml = "<Outer>" + xml + "</Outer>";
XDocument doc = XDocument.Parse(xml);
string[] array = doc.Descendants("Canvas").Select(item => item.ToString(SaveOptions.DisableFormatting)).ToArray();
此代码的输出为:
Background = #FF00FFFF
Name = Page_1
Width = 1200
Height = 900
TextBlockName = PageTitle1
Background = #FF00FFFF
Name = Page_2
Width = 1200
Height = 900
TextBlockName = PageTitle2
或者,您可以使用如下XML解析器:
string xml = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
xml = "<Outer>" + xml + "</Outer>";
XDocument doc = XDocument.Parse(xml);
string[] array = doc.Descendants("Canvas").Select(item => item.ToString(SaveOptions.DisableFormatting)).ToArray();
此代码的输出为:
Background = #FF00FFFF
Name = Page_1
Width = 1200
Height = 900
TextBlockName = PageTitle1
Background = #FF00FFFF
Name = Page_2
Width = 1200
Height = 900
TextBlockName = PageTitle2
或者,您可以使用如下XML解析器:
string xml = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
xml = "<Outer>" + xml + "</Outer>";
XDocument doc = XDocument.Parse(xml);
string[] array = doc.Descendants("Canvas").Select(item => item.ToString(SaveOptions.DisableFormatting)).ToArray();
此代码的输出为:
Background = #FF00FFFF
Name = Page_1
Width = 1200
Height = 900
TextBlockName = PageTitle1
Background = #FF00FFFF
Name = Page_2
Width = 1200
Height = 900
TextBlockName = PageTitle2
或者,您可以使用如下XML解析器:
string xml = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
xml = "<Outer>" + xml + "</Outer>";
XDocument doc = XDocument.Parse(xml);
string[] array = doc.Descendants("Canvas").Select(item => item.ToString(SaveOptions.DisableFormatting)).ToArray();
此代码的输出为:
Background = #FF00FFFF
Name = Page_1
Width = 1200
Height = 900
TextBlockName = PageTitle1
Background = #FF00FFFF
Name = Page_2
Width = 1200
Height = 900
TextBlockName = PageTitle2
使用Split
,然后迭代数组,并将“
插入到除最后一项之外的所有项的末尾
contents = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
objectsAsStrings = contents.Split(new string[] { "/Canvas><Canvas" }, StringSplitOptions.None);
for(var i = 0; i < objectsAsStrings.Length; i++)
{
if( 0 < i) objectsAsStrings[i] = "<Canvas" + objectsAsStrings[i];
if( i < objectsAsStrings.Length-1) objectsAsStrings[i] = objectsAsStrings[i] + "/Canvas>";
}
contents=”“;
objectsAsStrings=contents.Split(新字符串[]{”/Canvas>使用Split
,然后迭代数组,并将“
插入到除最后一项之外的所有项的末尾
contents = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
objectsAsStrings = contents.Split(new string[] { "/Canvas><Canvas" }, StringSplitOptions.None);
for(var i = 0; i < objectsAsStrings.Length; i++)
{
if( 0 < i) objectsAsStrings[i] = "<Canvas" + objectsAsStrings[i];
if( i < objectsAsStrings.Length-1) objectsAsStrings[i] = objectsAsStrings[i] + "/Canvas>";
}
contents=”“;
objectsAsStrings=contents.Split(新字符串[]{”/Canvas>使用Split
,然后迭代数组,并将“
插入到除最后一项之外的所有项的末尾
contents = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
objectsAsStrings = contents.Split(new string[] { "/Canvas><Canvas" }, StringSplitOptions.None);
for(var i = 0; i < objectsAsStrings.Length; i++)
{
if( 0 < i) objectsAsStrings[i] = "<Canvas" + objectsAsStrings[i];
if( i < objectsAsStrings.Length-1) objectsAsStrings[i] = objectsAsStrings[i] + "/Canvas>";
}
contents=”“;
objectsAsStrings=contents.Split(新字符串[]{”/Canvas>使用Split
,然后迭代数组,并将“
插入到除最后一项之外的所有项的末尾
contents = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
objectsAsStrings = contents.Split(new string[] { "/Canvas><Canvas" }, StringSplitOptions.None);
for(var i = 0; i < objectsAsStrings.Length; i++)
{
if( 0 < i) objectsAsStrings[i] = "<Canvas" + objectsAsStrings[i];
if( i < objectsAsStrings.Length-1) objectsAsStrings[i] = objectsAsStrings[i] + "/Canvas>";
}
contents=”“;
objectsassstrings=contents.Split(新字符串[]{“/Canvas>@Najib是对的
但你永远不知道你会得到多少子串。。。。。。。。。
因此
而不是
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
试试这个
string mailstring = "<Canvas Background='#FF00FFFF' Name='Page_1' Width='1200' Height='900' ><TextBlock Name='PageTitle' /></Canvas><Canvas Background='#FF00FFFF' Name='Page_2' Width='1200' Height='900'<TextBlock Name='PageTitle' /></Canvas>";
string splitor = "</Canvas>";
string[] substrings = mailstring.Split(new string[] { splitor }, StringSplitOptions.None);
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
for(int i=0;i<substrings.Lenght;i++)
{
substrings[i]+=splitor;
}
(inti=0;i)的@Najib是对的
但你永远不知道你会得到多少子串。。。。。。。。。
因此
而不是
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
试试这个
string mailstring = "<Canvas Background='#FF00FFFF' Name='Page_1' Width='1200' Height='900' ><TextBlock Name='PageTitle' /></Canvas><Canvas Background='#FF00FFFF' Name='Page_2' Width='1200' Height='900'<TextBlock Name='PageTitle' /></Canvas>";
string splitor = "</Canvas>";
string[] substrings = mailstring.Split(new string[] { splitor }, StringSplitOptions.None);
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
for(int i=0;i<substrings.Lenght;i++)
{
substrings[i]+=splitor;
}
(inti=0;i)的@Najib是对的
但你永远不知道你会得到多少子串。。。。。。。。。
因此
而不是
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
试试这个
string mailstring = "<Canvas Background='#FF00FFFF' Name='Page_1' Width='1200' Height='900' ><TextBlock Name='PageTitle' /></Canvas><Canvas Background='#FF00FFFF' Name='Page_2' Width='1200' Height='900'<TextBlock Name='PageTitle' /></Canvas>";
string splitor = "</Canvas>";
string[] substrings = mailstring.Split(new string[] { splitor }, StringSplitOptions.None);
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
for(int i=0;i<substrings.Lenght;i++)
{
substrings[i]+=splitor;
}
(inti=0;i)的@Najib是对的
但你永远不知道你会得到多少子串。。。。。。。。。
因此
而不是
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
试试这个
string mailstring = "<Canvas Background='#FF00FFFF' Name='Page_1' Width='1200' Height='900' ><TextBlock Name='PageTitle' /></Canvas><Canvas Background='#FF00FFFF' Name='Page_2' Width='1200' Height='900'<TextBlock Name='PageTitle' /></Canvas>";
string splitor = "</Canvas>";
string[] substrings = mailstring.Split(new string[] { splitor }, StringSplitOptions.None);
string part1 = substrings[0] + splitor;
string part2 = substrings[1] + splitor;
for(int i=0;i<substrings.Lenght;i++)
{
substrings[i]+=splitor;
}
for(int i=0;i不确定使用linq进行字符串操作是否合适,但这里有另一种方法:
var contents = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
var a = from word in contents.Split(new string[] { "/Canvas><Canvas" }, StringSplitOptions.None) select word;
var b = from word in a where word == a.First() select word.Replace("<Canvas","");
var c = from word in a where word == a.Last() select word.Replace("/Canvas>","");
var d = from word in a where word != a.Last() && word != a.First() select word;
var result = b.Concat(d).Concat(c).Select(f => "<Canvas" + f + "/Canvas>");`
var contents=”“;
var a=from contents.Split(新字符串[]{“/Canvas>不确定使用linq处理该字符串是否合适,但这里有另一种方法:
var contents = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
var a = from word in contents.Split(new string[] { "/Canvas><Canvas" }, StringSplitOptions.None) select word;
var b = from word in a where word == a.First() select word.Replace("<Canvas","");
var c = from word in a where word == a.Last() select word.Replace("/Canvas>","");
var d = from word in a where word != a.Last() && word != a.First() select word;
var result = b.Concat(d).Concat(c).Select(f => "<Canvas" + f + "/Canvas>");`
var contents=”“;
var a=from contents.Split(新字符串[]{“/Canvas>不确定使用linq处理该字符串是否合适,但这里有另一种方法:
var contents = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
var a = from word in contents.Split(new string[] { "/Canvas><Canvas" }, StringSplitOptions.None) select word;
var b = from word in a where word == a.First() select word.Replace("<Canvas","");
var c = from word in a where word == a.Last() select word.Replace("/Canvas>","");
var d = from word in a where word != a.Last() && word != a.First() select word;
var result = b.Concat(d).Concat(c).Select(f => "<Canvas" + f + "/Canvas>");`
var contents=”“;
var a=from contents.Split(新字符串[]{“/Canvas>不确定使用linq处理该字符串是否合适,但这里有另一种方法:
var contents = "<Canvas Background=\"#FF00FFFF\" Name=\"Page_1\" Width=\"1200\" Height=\"900\" ><TextBlock Name=\"PageTitle\" /></Canvas><Canvas Background=\"#FF00FFFF\" Name=\"Page_2\" Width=\"1200\" Height=\"900\"><TextBlock Name=\"PageTitle\" /></Canvas>";
var a = from word in contents.Split(new string[] { "/Canvas><Canvas" }, StringSplitOptions.None) select word;
var b = from word in a where word == a.First() select word.Replace("<Canvas","");
var c = from word in a where word == a.Last() select word.Replace("/Canvas>","");
var d = from word in a where word != a.Last() && word != a.First() select word;
var result = b.Concat(d).Concat(c).Select(f => "<Canvas" + f + "/Canvas>");`
var contents=”“;
var a=来自contents.Split中的单词(新字符串[]{"/Canvas>xaml文件内容基本上都是xml。为此,您应该使用xml解析器。您可以看看linq to xml。为什么不使用xml解析器呢。这会很好,但是xml解析器会抛出一个异常,因为字符串包含两个同名的文本块。因为我只想将画布保存到字典中,这没有问题,但是xml解析器抱怨…xml解析器不应该关心Textblocks的Name属性值。可能的问题是,您发布的字符串不是有效的xml,而是xml片段。有效的xml只有一个包含内容的根元素。您可以将xml片段包装在根元素中,然后尝试解析.xaml文件内容基本上都是xml。为此,您应该使用xml解析器。您可以看看linq to xml。为什么不使用xml解析器呢。这将是非常好的,但是xml解析器会抛出一个异常,因为字符串包含两个同名的文本块。因为我只想将画布保存到字典中,这没有问题,但是xml解析器抱怨…xml解析器不应该关心Textblocks的Name属性值。可能的问题是,您发布的字符串不是有效的xml,而是xml片段。有效的xml只有一个包含内容的根元素。您可以将xml片段包装在根元素中,然后尝试解析。xaml file内容基本上是xml。为此,您应该使用xml解析器。您可以看看linq to xml。为什么不使用xml解析器呢。这可能会很奇怪,但xml解析器会抛出一个异常,因为字符串包含两个同名的文本块。因为我只想将画布保存到字典中,这没有问题,但是xml解析器抱怨…xml解析器不应该关心Textblocks的Name属性值。可能的问题是,您发布的字符串不是有效的xml,而是xml片段。有效的xml只有一个包含内容的根元素。您可以将xml片段包装在根元素中,然后尝试解析.xaml文件帐篷基本上是xml。你应该为此使用xml解析器。你可以看看linq to xml。为什么不使用xml解析器呢。那太好了,但是xml解析器会抛出一个异常,因为字符串包含两个同名的文本块。因为我只想将画布保存到字典中,这没有问题,但xml解析器会抱怨ins…xml解析器不应该关心Textblocks的Name属性的值。可能的问题是,您发布的字符串不是有效的xml,而是xml片段。有效的xml只有一个根元素,其中包含