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]/>
同样的正则 如果我把字符串中每个/>后面都加上一个换行符,就能达到我的要求 展开
<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]/>
同样的正则 如果我把字符串中每个/>后面都加上一个换行符,就能达到我的要求 展开
1个回答
展开全部
按照你的要求编写的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标签内的数据,那么,我们可以得到同样的效果.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询