一个字符串,中间包含XPath,XPath 使用“{”和“}” ,即{XPath1}xxx{XPath2}.
需要取出XPath ,并且在一个XML文件中间计算XPath表达式的值。
显然需要用到正则表达式:
代码如下:
static void Main(string[] args)
{
String inputString = "{/root/ID}:{/root/Name}"; //使用{}为转义
Regex r;
Match m;
r = new Regex("(?:{(?<1>[^}]*)})",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
for (m = r.Match(inputString); m.Success; m = m.NextMatch())
{
Console.WriteLine("Found matchs : " + m.Groups[1] + " at "
+ m.Groups[1].Index);
}
}
{
String inputString = "{/root/ID}:{/root/Name}"; //使用{}为转义
Regex r;
Match m;
r = new Regex("(?:{(?<1>[^}]*)})",
RegexOptions.IgnoreCase | RegexOptions.Compiled);
for (m = r.Match(inputString); m.Success; m = m.NextMatch())
{
Console.WriteLine("Found matchs : " + m.Groups[1] + " at "
+ m.Groups[1].Index);
}
}
运行结果如下:
有待改进的地方:
这是一个使用单个字符{和}来分隔的,如果要是使用多个字符,比如<XPath>/root/ID</XPath>,不知道该如何写?
我看到这里好像有不少正则表达式的高手,不妨教教我,呵呵。
为了满足需求,
我们后来使用了正则表达式另外一个好用的功能:Split
只要使用这个就可以把字符串拆成一个字符数组:
string[] sXPath = r.Split(inputString);
并且,所有的偶数位置的就是匹配出来的,就算2个表达式之间没有任何字符,也会在中间插入一个空的字符占位,这样,只要计算偶数位置的XPath就好了。
看看数组里面的内容: