求一正则, 得正确答案马上结贴 本帖最后由 honkerhero 于 2012-07-06 11:38:50 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 内容只有这样吗?string result = Regex.Replace(str, @"(?is)<span[^>]*?>(.+)</span>", "$1"); [code=C#]string pattern = @"(?i)(?<=<SPAN Class=""c1"">)[\s\S]*(?=</span>)"; string tempStr = Regex.Match(tempStr,pattern).Value;[/code] 不是, 系统中可能有很多这样的标记, 但原则就是把span中的内容从中拿出来 <SPAN Class="c1"><div><span class="c2"></span>abc<span class="c2"></span></div></span><SPAN Class="c1"><div><span class="c2"></span>abc<span class="c2"></span></div></span>这样的话, 会把头和尾去掉, HTML格式乱了 试试看... string str = @"<SPAN Class=""c1""><div><span class=""c2""></span>abc<span class=""c2""></span></div></span><SPAN Class=""c1""><div><span class=""c2""></span>abc<span class=""c2""></span></div></span>"; Regex reg = new Regex(@"(?is)<span[^>]*?>[^<>]+((?:(?:(?<Open><[^>]+?>)[^<>]*)*(?:(?<-Open></[^>]+?>)[^<>]*)*)*)(?(Open)(?!))</span>"); foreach (Match m in reg.Matches(str)) Console.WriteLine(m.Groups[1].Value); string tempStr = File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\Test.txt", Encoding.GetEncoding("GB2312"));//读取txt Regex reg = new Regex(@"(?isx) #匹配模式,忽略大小写,“.”匹配任意字符 <span[^>]*> #开始标记“<span...>” ((?> #分组构造,用来限定量词“*”修饰范围 <span[^>]*> (?<Open>) #命名捕获组,遇到开始标记,入栈,Open计数加1 | #分支结构 </span> (?<-Open>) #狭义平衡组,遇到结束标记,出栈,Open计数减1 | #分支结构 (?:(?!</?span\b).)* #右侧不为开始或结束标记的任意字符 )* #以上子串出现0次或任意多次 (?(Open)(?!))) #判断是否还有'OPEN',有则说明不配对,什么都不匹配 </span> "); tempStr = reg.Replace(tempStr, a => { return a.Groups[1].Value; }); /* * <div><span class="c2"></span>abc<span class="c2"></span> </div> <div><span class="c2"></span>abc<span class="c2"></span> </div> */ 喔 你是要替换, string str = @"fdsafsdfsdfa<SPAN Class=""c1""><div><span class=""c2""></span>abc<span class=""c2""></span></div></span>asdfasdfasd<SPAN Class=""c1""><div><span class=""c2""></span>abc<span class=""c2""></span></div></span>fsad"; Regex reg = new Regex(@"(?is)\s*<span[^>]*?>((?:(?<Open>)<span[^>]*?>|(?<-Open>)</span>|(?:(?!</?span).)*)*)(?(Open)(?!))</span>\s*"); str = reg.Replace(str, "$1"); Console.WriteLine(str); 再问一下, 能不能把前半截补全, 把后半截去掉, 变成下边的样子fdsafsdfsdfa<SPAN Class=""c1""></span><div><span class=""c2""></span>abc<span class=""c2""></span></div>asdfasdfasd<SPAN Class=""c1""></span><div><span class=""c2""></span>abc<span class=""c2""></span></div>fsad =============LinqToXML哪个朋友帮下忙======== 控件伸缩如何实现? 怎么引用静态类型中定义的数据类型? winform richtextbox问题 .net生成静态网页 连接access的问题。 100分征一搜索算法 C#写的一个网络通信程序的问题,高人请进,100分相送 把本机编译的C#拿到别处运行,需要的库版本问题? 好心人来看一下 求思路,求解脱... C#是否可以执行数据库里的Job
string result = Regex.Replace(str, @"(?is)<span[^>]*?>(.+)</span>", "$1");
string tempStr = Regex.Match(tempStr,pattern).Value;[/code]
<div><span class="c2"></span>abc<span class="c2"></span>
</div>
</span>
<SPAN Class="c1">
<div><span class="c2"></span>abc<span class="c2"></span>
</div>
</span>
这样的话, 会把头和尾去掉, HTML格式乱了
string str = @"<SPAN Class=""c1"">
<div><span class=""c2""></span>abc<span class=""c2""></span>
</div>
</span>
<SPAN Class=""c1"">
<div><span class=""c2""></span>abc<span class=""c2""></span>
</div>
</span>
";
Regex reg = new Regex(@"(?is)<span[^>]*?>[^<>]+((?:(?:(?<Open><[^>]+?>)[^<>]*)*(?:(?<-Open></[^>]+?>)[^<>]*)*)*)(?(Open)(?!))</span>");
foreach (Match m in reg.Matches(str))
Console.WriteLine(m.Groups[1].Value);
string tempStr = File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\Test.txt", Encoding.GetEncoding("GB2312"));//读取txt
Regex reg = new Regex(@"(?isx) #匹配模式,忽略大小写,“.”匹配任意字符 <span[^>]*> #开始标记“<span...>” ((?> #分组构造,用来限定量词“*”修饰范围 <span[^>]*> (?<Open>) #命名捕获组,遇到开始标记,入栈,Open计数加1 | #分支结构 </span> (?<-Open>) #狭义平衡组,遇到结束标记,出栈,Open计数减1 | #分支结构 (?:(?!</?span\b).)* #右侧不为开始或结束标记的任意字符 )* #以上子串出现0次或任意多次 (?(Open)(?!))) #判断是否还有'OPEN',有则说明不配对,什么都不匹配 </span> ");
tempStr = reg.Replace(tempStr, a =>
{
return a.Groups[1].Value; });
/*
* <div><span class="c2"></span>abc<span class="c2"></span>
</div>
<div><span class="c2"></span>abc<span class="c2"></span>
</div>
*/
string str = @"fdsafsdfsdfa<SPAN Class=""c1"">
<div><span class=""c2""></span>abc<span class=""c2""></span>
</div>
</span>asdfasdfasd
<SPAN Class=""c1"">
<div><span class=""c2""></span>abc<span class=""c2""></span>
</div>
</span>fsad
";
Regex reg = new Regex(@"(?is)\s*<span[^>]*?>((?:(?<Open>)<span[^>]*?>|(?<-Open>)</span>|(?:(?!</?span).)*)*)(?(Open)(?!))</span>\s*");
str = reg.Replace(str, "$1");
Console.WriteLine(str);
<div><span class=""c2""></span>abc<span class=""c2""></span>
</div>
asdfasdfasd
<SPAN Class=""c1""></span>
<div><span class=""c2""></span>abc<span class=""c2""></span>
</div>
fsad