我正在尝试拆分表示XPath的字符串,例如:
我需要在“/”上进行分割(结果不包括“/”,就像普通的字符串分割一样),除非“/”恰好在“[...]”内(在此情况下,“/”既不会被分割,也会包含在结果中)。
所以,使用正常的
`results[2]`和`result[3]`应该被合并,最终我应该得到:
string myPath = "/myns:Node1/myns:Node2[./myns:Node3=123456]/myns:Node4";
我需要在“/”上进行分割(结果不包括“/”,就像普通的字符串分割一样),除非“/”恰好在“[...]”内(在此情况下,“/”既不会被分割,也会包含在结果中)。
所以,使用正常的
string[] result = myPath.Split("/".ToCharArray())
得到的结果是:result[0]: //Empty string, this is ok
result[1]: myns:Node1
result[2]: myns:Node2[.
result[3]: myns:Node3=123456]
result[4]: myns:Node4
`results[2]`和`result[3]`应该被合并,最终我应该得到:
result[0]: //Empty string, this is ok
result[1]: myns:Node1
result[2]: myns:Node2[./myns:Node3=123456]
result[3]: myns:Node4
由于我对正则表达式不是非常熟练,所以在分割后手动重新组合结果成为一个新数组,但让我担心的是,虽然在这个例子中让它工作很容易,但在我得到更复杂的xpath时,正则表达式似乎是更好的选择。
就记录而言,我看过以下问题:
Regex split string preserving quotes
C# Regex Split - commas outside quotes
Split a string that has white spaces, unless they are enclosed within "quotes"?
虽然它们应该足以帮助我解决问题,但我遇到了一些问题/令人困惑的方面,阻止它们帮助我。
在前两个链接中,作为一个正则表达式新手,我发现它们很难理解和学习。它们正在寻找引号,这些引号在左右成对的情况下看起来相同,因此将其转换为 [ 和 ] 对我来说很困惑,尝试和错误没有教会我任何东西,而是让我更加沮丧。我可以理解相当基本的正则表达式,但这些答案所做的事情比我目前理解的要多一些,即使在第一个链接中有解释。
在第三个链接中,我将无法使用LINQ,因为代码将在较旧版本的.NET中使用。