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

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]/>
同样的正则 如果我把字符串中每个/>后面都加上一个换行符,就能达到我的要求

按照你的要求编写的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标签内的数据,那么,我们可以得到同样的效果.

追问

不好意思还要麻烦您一下。我尝试改了一下,现在想取出和后面第一个的内容 还是昨天的题,数据格式是........其中不匹配的个数未知

追答

按照你的新要求编写的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\"[^<>]*?/>[^<>]*?<nod[^<>]*?/>",RegexOptions.IgnoreCase);

   foreach (Match m in mc){

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

   }

   Console.ReadKey();

  }

 }

}

温馨提示:内容为网友见解,仅供参考
无其他回答

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 =Re...

...多个标签中特定的一个(特定的中包含特定的字符串,通过这个字符串获取...
可以用正则表达式实现(自己娘度正则表达式)如果觉得正则不好掌握 ,可以先查找 然后把后面的字符串存入另一个变量,在这个变量中查找<\/il> 截取这之前的部分就是特定字符串了

用c#如何突出显示一段字符串中的一些特定字符
using System.Collections.Generic;namespace BaiduTest { class Program { public static void Main(string[] args){ string str = "^1234^abcd^5678^^efgh^^one^^";Regex regex = new Regex(@"\\^.+?\\^");\/\/将匹配的结果存储起来。List<string> resultList = new List<string>();foreach...

c# 正则表达式提取()中的值
您的正则表达式基本正确,只需要将结尾的$符号去掉即可匹配包含COM的子串。另外,如果括号中只有COM后面的数字部分需要提取,可以使用正则表达式的捕获组功能,将COM和数字部分分别放在不同的捕获组中,然后只提取数字部分即可。解释一下上述正则表达式的含义:\\b 匹配单词边界,用于确保COM前面不会有其他字符...

在python中,正则表达式元字符中的哪个用来匹配任意空白字符
当使用正则表达式时,可以使用元字符来匹配特定的字符模式。在Python中,可以使用`\\s`来匹配任意空白字符,包括空格、制表符和换行符等。 例如,以下代码片段演示了如何使用正则表达式来匹配一个包含任意空白字符的字符串: ```python import re pattern = r'\\s+' text = 'This is a string with ...

C#如何判断字符串中是否包含某个字符
通过正则表达式判断是否匹配,不仅可以用来做简单的判断匹配,还可以进行精确的匹配,如判断是否是六位的数字字符串,Email匹配等。正则表达式是一种很好的方法。protected void Button1_Click(object sender,EventArgs e){ string message=TextBox1.Text.Trim();isNumeric(message);\/\/判断字符串是否为5为...

c#正则表达式[^]是什么意思 ? string model =@"\\[[^]]*\\]"; 能不能...
它的意思是匹配[...] 之间任意内容的字符。^在正则中是"排除、不包含"的意思.如果它是想匹配[...]之间的任意内容的字符的话,写的有点问题.应该是这样:string model=@"\\[^]*\\]";

C#识别数字串,怎么把多个连续的点替换成一个点?
点是固定个数吗,要是太容易了,用Replace函数就行了,要不是,那也不难先用split('.')分成数组。然后再组一下就行了。

正则表达式 替换或去掉字符串中的 标签 如: 张三aaaa历史bbbb
2012-04-17 python中利用正则表达式的删除特定字符的问题 2016-03-28 java的String类的replaceAll方法按照固定开... 1 2010-05-17 正则表达式求一个元素不在括号内 2013-01-01 正则匹配 正则表达式的相关知识2010-12-01 正则表达式匹配字符串 7 2007-01-15 正则表达式 替换 9 2011-06-27 正则表达式提...

C#正则表达式,"\\1"是什么意思?
\\0是完整正则匹配的自身 \\1 就是用户用()定义的第一组 同理\\2 就是第二组 例如(\\d)(\\w)匹配1b 这时 \\0是1b \\1是1 \\2是b

相似回答