求一正则, 得正确答案马上结贴

honkerhero 2012-07-06 11:31:28
现有HTML字符串
<SPAN Class="c1">
<div><span class="c2"></span>abc<span class="c2"></span>
</div>
</span>

想要结果:
<div><span class="c2"></span>abc<span class="c2"></span>
</div>

如何把最外边的span标记去掉, 换句话说, 把有内容的span标记去掉, 补充一句,class的值是不定的, 原则就是去掉包含内容的span标记, 只去标记, 内容还留在原地.

如何正确匹配开始与结束?

我现在这样写的
Regex.Replace(html3 , "<span style=\"white-space: pre;\" class=\"Apple-tab-span\">(.*?)</span>", "$1", RegexOptions.IgnoreCase);
结束标记匹配错误
...全文
254 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

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>
*/
huangwenquan123 2012-07-06
  • 打赏
  • 举报
回复
试试看...
            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);
honkerhero 2012-07-06
  • 打赏
  • 举报
回复
<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格式乱了
honkerhero 2012-07-06
  • 打赏
  • 举报
回复
我怎么写的.* .......
honkerhero 2012-07-06
  • 打赏
  • 举报
回复
不是, 系统中可能有很多这样的标记, 但原则就是把span中的内容从中拿出来
  • 打赏
  • 举报
回复
[code=C#]string pattern = @"(?i)(?<=<SPAN Class=""c1"">)[\s\S]*(?=</span>)";
string tempStr = Regex.Match(tempStr,pattern).Value;
[/code]
huangwenquan123 2012-07-06
  • 打赏
  • 举报
回复
内容只有这样吗?
string result = Regex.Replace(str, @"(?is)<span[^>]*?>(.+)</span>", "$1");
honkerhero 2012-07-06
  • 打赏
  • 举报
回复
啊, 人呢
honkerhero 2012-07-06
  • 打赏
  • 举报
回复
再问一下, 能不能把前半截补全, 把后半截去掉, 变成下边的样子

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
honkerhero 2012-07-06
  • 打赏
  • 举报
回复
谢谢两位正则高手, 每人100分
huangwenquan123 2012-07-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
GROUP取出来了, 怎么替换?
[/Quote]喔 你是要替换,
            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);
honkerhero 2012-07-06
  • 打赏
  • 举报
回复
GROUP取出来了, 怎么替换?
内容概要:本报告基于寻汇与万事达卡在2026年联合发布的《超越自动化:定义智能体驱动的全球支付》白皮书,系统分析了AI智能体在B2B跨境支付领域的应用与发展。报告指出,传统跨境支付存在效率低、人工干预多、合规风险高等问题,当前正从数字化、数据化迈向“自主化”新阶段。AI智能体可在授权下自主完成支付、换汇、合规审核、对账等全流程操作,核心技术包括深度强化学习、自然语言处理和图神经网络,用于路径优化、合规解析与异常检测。报告揭示了决策可解释性不足、跨系统协同标准缺失、安全审计机制缺位三大研究空白,并探讨了法律责任归属、监管碎片化、数据主权与技术可靠性四大现实挑战。寻汇与万事达卡的合作构建了“智能体编排引擎”与全球合规决策网络,首次提出L0-L5的智能体自主化等级框架,推动行业标准化。预计2026至2027年将实现首批大规模商业部署,提升支付效率超30%。; 适合人群:金融科技研究人员、AI技术开发者、跨境支付行业从业者、企业财资管理人员及政策监管机构相关人员。; 使用场景及目标:①理解AI智能体在跨境支付中的技术架构与应用场景;②把握自主化支付的演进趋势与商业化前景;③为金融机构和技术公司布局AI驱动型支付系统提供战略参考;④助力监管机构制定适应智能体时代的合规框架。; 阅读建议:本报告兼具技术深度与产业视野,建议结合白皮书原文及相关技术文献对照研读,重点关注智能体决策逻辑、合规实现机制与跨系统集成方案,并关注后续试点项目的实际成效与监管反馈。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧