我现在又这么一串字符
<item>任意字符</item><item>任意字符</item><item>任意字符</item><item>任意字符</item><item>任意字符</item>
我用表达式<item>(.*)</item>匹配出来的结果是“任意字符</item><item>任意字符</item><item>任意字符</item><item>任意字符</item><item>任意字符”
请问怎么才能匹配出每一个item里的内容呢?

解决方案 »

  1.   

    因为.*表示匹配任意字符0次以上,那么当匹配到</item>的"<"时也作为一个字符匹配了,结果就是你的字符串都将被匹配,因此可以使用匹配到"<"字符就结束,因此可以使用这样的表达式:<item>[^<]*</item>,其中[^<]*表示匹配除了"<"的所有字符0次以上(你也可以用[^<]+匹配1次以上),这样当匹配到<时就算一次匹配,然后去掉两头的标签(<item>和</item>)就可以得到你要的结果,你应该是做网页标签的提取吧,呵呵
      

  2.   

    把数据保存到XML,绑定到dataset获取更简单
    参考
      

  3.   

    楼上回答的很详细,是我自己没有说清楚<item></item>表签之间还有其他的标签,比如<name>之类的,由于中间的标签不固定
    所以楼上说的[^ <]*好像不太可行,不过也很感谢楼上做出如此详细的解答,如果明天早上还没有满意答案我就结贴,如果觉得分数不够可以再加
      

  4.   

    string s = "<item>任意字符 </item> <item>任意字符 </item> <item>任意字符 </item> <item>任意字符 </item> <item>任意字符 </item>";string reg = "<item>(.*?)</item>";
    foreach (Match m in Regex.Matches(s, reg, RegexOptions.Singleline | RegexOptions.IgnoreCase)) {
                    string currentItem = m.Groups[1].Value;
                }
      

  5.   

    Regex regex = new Regex("(?<=<item>).*?(?=</item>)", RegexOptions.Singleline| RegexOptions.Multiline| RegexOptions.IgnoreCase);
      

  6.   


    string strReg = "(?<=<item>)(?<A0>.+?)(?=</item>)";
    //正则是我的强项,互联网上的所有web数据,我基本都可以抓取