C# 使用某些字符串作为拆分器将字符串拆分为数组,并确保数组包含拆分器文本

C# 使用某些字符串作为拆分器将字符串拆分为数组,并确保数组包含拆分器文本,c#,arrays,string,split,C#,Arrays,String,Split,我有一些C[WebMethod]中的文本: string myText = "<item>One</item><item>Two</item><item>Three</item>"; 我希望将它们拆分为一个数组myArray,每个索引上都有以下字符串: myArray[0] = <item>One</item> myArray[1] = <item>Two</item> my

我有一些C[WebMethod]中的文本:

string myText = "<item>One</item><item>Two</item><item>Three</item>";
我希望将它们拆分为一个数组myArray,每个索引上都有以下字符串:

myArray[0] = <item>One</item>
myArray[1] = <item>Two</item>
myArray[2] = <item>Three</item>
这就是我努力实现这一目标的方式:

string[] myArray = Regex.Split(myText, "</item><item>");
问题是,我得到了一个不理想的结果:

myArray[0] = <item>One
myArray[1] = Two
myArray[2] = Three</item>
很明显,它从结果数组元素中排除了我用来分割myText的条件

我也尝试过:

string[] myArray = Regex.Split(myText, "$1" + "</item><item>" + "$2");
这一个甚至没有拆分文本。 我也愿意接受任何不同处理方法的建议

评论中每个建议的附加信息


我将把这些“项”作为节点存储在BaseX数据库中。我在BaseX中遇到的问题是,据我所知,BaseX的“插入节点…”XQUERY只适用于插入一个节点/项。因此,我在这里的计划是将所有项存储在一个数组中,并循环遍历其中的每一项,以便分别为每个节点/项运行BaseXQuery。我希望我说得很清楚:这会给你你想要的:

string[] myArray = Regex.Matches(myText, "<item>.*?</item>").Cast<Match>().Select(m => m.Value).ToArray();

你为什么要这么做?正则表达式是解析xml的一个特别糟糕的选择。放弃并使用适合工作的工具。为什么不使用xml解析器呢?XDocument将是一个很好的选择。即使你打算使用正则表达式,我认为你应该在经过一些考虑后,只对这一对进行拆分,我在这里使用了我的dupehammer,因为你的做法是错误的。实际上,您正在尝试解析一组xml片段,链接问题中提供了正确的解析方法。Regex不是XML解析器。但是如果你把输出分成123个,你可以添加到它们的末尾,但是也许你应该考虑SPANDER的方法。@ SpEng:我将把这些“项目”作为BaseX数据库中的节点存储起来。我在BaseX中遇到的问题是,据我所知,BaseX的“插入节点…”XQUERY只适用于插入一个节点/项。因此,我在这里的计划是将所有项存储在一个数组中,并循环遍历其中的每一项,以便分别为每个节点/项运行BaseXQuery。我希望我说得很清楚:反对票是怎么回事?它完全符合问题中的要求。我看到有一些关于他是否应该尝试这样做的争论,但这并没有改变答案的准确性。虽然不是我投了反对票,但引导人们远离解决他们问题的方案始终是一个好主意,因为XY问题的正确答案并不是他们实际问题的正确答案。提供这样的答案并不能丰富OP的技能。。。相反,它提供了一种延续不良行为的手段。我可以说,你的假设可能是短视的。根据几行代码,您假设您知道他正在尝试做什么。它看起来确实像xml,但您不知道它来自哪里,也不知道他为什么需要拆分这些值。您可能是对的,但其他人可能需要拆分一个类似的非xml模式,因此无法将其作为示例。