c#正则表达式 包含多个特定字符串怎么匹配

dioc<nodid="c"b=[0,0]/>rwer<nodid="a"b=[3,3]/>rwerf<nodid="c"b=[6,4]/>docq<nod.*?id="... dioc<nod id="c" b=[0,0] />rwer<nod id="a" b=[3,3]/>rwerf<nod id="c" b=[6,4]/>docq

<nod.*?id="c".*?/>
我想取出<>中间id是C的 b=的值
也就是第一个<>和第三个<>中b的值
但是我自己写的正则 第一个<>可以正常取,到了第三个<>的时候直接吧第二个<>的内容也取到了,应该怎么改一下哦:输出内容现在是
<nod id="c" b=[0,0] />
<nod id="a" b=[3,3]/>rwerf<nod id="c" b=[6,4]/>
而我想要的输出是
<nod id="c" b=[0,0] />
<nod id="c" b=[6,4]/>
同样的正则 如果我把字符串中每个/>后面都加上一个换行符,就能达到我的要求
展开
 我来答
紫薇参星
科技发烧友

2019-01-08 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3480万
展开全部

按照你的要求编写的C#程序如下(输出是你要求的样子)

using System;

using System.Text.RegularExpressions;

namespace MatchApplication{

 class MatchClass{

  static void Main(string[] args){

   string s="dioc<nod id=\"c\" b=[0,0] />rwer<nod id=\"a\" b=[3,3]/>rwerf<nod id=\"c\" b=[6,4]/>docq";

   MatchCollection mc =Regex.Matches(s, "<nod[^<>]*?id=\"c\"[^<>]*?/>",RegexOptions.IgnoreCase);

   foreach (Match m in mc){

            Console.WriteLine(m.Groups[0].Value);

   }

   Console.ReadKey();

  }

 }

}
更多追问追答
追问
感谢的确可以,顺便问一下为什么这句正则表达式在regex match这种测试工具里面却无法正确匹配呢
追答
因为点匹配除换行符外的所有字符,所以你如果把字符串末尾加上换行符,就会使.*?匹配行内的数据
所以如果我们把.*?改成[^]*?,让其只匹配nod标签内的数据,那么,我们可以得到同样的效果.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式