关于正则表达式,向高手请教。

heywap 2009-04-25 01:15:40
各位正则高手:

如果有这样的html.
<div id="divcontainer" class="style" lang="zh-CN">helloworld </div>
请问,我想得到以下的结果
<div id="divcontainer">helloworld </div>
正则表达式该怎么写。

规则也就是我只要获取指定的属性名和属性值,其它的属性全部去掉。谢谢。
...全文
154 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
heywap 2009-04-27
  • 打赏
  • 举报
回复
TO:LCL_data

并非是慕白兄写的不好。是我对正则一无所知。
所以没有办法改写慕白兄写的。
feilongqisi 2009-04-27
  • 打赏
  • 举报
回复
mark 向大牛学习
十八道胡同 2009-04-25
  • 打赏
  • 举报
回复
其实楼主可以去参考一下正则的写法,这个应该不难。
慕白兄写的很好。赞
十八道胡同 2009-04-25
  • 打赏
  • 举报
回复
好像要把每个要的属性全写进正则里面把
Equn 2009-04-25
  • 打赏
  • 举报
回复
我那个表达式可以匹配的。

再给你一个可以匹配属性值用单引号或无引号的情况。

表达式:<div[^>]*(\s*id=(['"])?.*?\2\s*)[^>]*>(.*)</div>
替换:<div $1>$3</div>
feilongqisi 2009-04-25
  • 打赏
  • 举报
回复
友情up 学习了
heywap 2009-04-25
  • 打赏
  • 举报
回复
感谢cpp2017、Equn、symbol441 给予我的帮助。

TO:cpp2017

您给的代码,我在vs中仔细的尝试了一下,可能是我描述的不够完整。
您看,如果html是这样的

<div align="center" id="divcontainer" class="style" lang="zh-CN">helloworld <a id='anchor' target='_blank' href='http://www.sohu.com'>www.sohu.com</a></div>


我希望得到的

<div id="divcontainer">helloworld <a href='http://www.sohu.com'>www.sohu.com</a></div>

也就是说,对于div元素,我希望保留id,去掉其它的属性。而对于a,我希望保留href,而去掉其它的。

我可以在程序中多写几行System.Text.RegularExpressions.Regex.Replace这样的代码。

您的代码我做了修改,可是达不到我预期的目的。麻烦大伙了。再次表示感谢。
cpp2017 2009-04-25
  • 打赏
  • 举报
回复
第三个例子:


str = @" <span id=""divcontainer"" class='style__""______' lang=""zh-CN"">helloworld </span> ";
sProperty = "class";
str = System.Text.RegularExpressions.Regex.Replace(str, @"<(\w+)[^>]*?(" + sProperty + @"=(['""])?[^\3]*?\3)[^>]*?>", "<$1 $2>");
Response.Write(Server.HtmlEncode(str));
cpp2017 2009-04-25
  • 打赏
  • 举报
回复
 string str = @" <div id=""divcontainer"" class=""style"" lang=""zh-CN"">helloworld </div> ";
string sProperty = "id";
str = System.Text.RegularExpressions.Regex.Replace(str, @"<(\w+)[^>]*?(" + sProperty + @"=(['""])?[^\3]*?\3)[^>]*?>", "<$1 $2>");
Response.Write(Server.HtmlEncode(str));


Response.Write("<BR>");
//第二个例子
str = @" <a id=""divcontainer"" class=""style__''''______"" lang=""zh-CN"">helloworld </a> ";
sProperty = "class";
str = System.Text.RegularExpressions.Regex.Replace(str, @"<(\w+)[^>]*?(" + sProperty + @"=(['""])?[^\3]*?\3)[^>]*?>", "<$1 $2>");
Response.Write(Server.HtmlEncode(str));
symbol441 2009-04-25
  • 打赏
  • 举报
回复
参考

string re = "(?<=<div[\\s\\S]*)class=([\'\"]?).+\\1\\s*lang=([\'\"]?).+\\2>";
string source = "如果有这样的html. " +
"<div id=\"divcontainer\" class=\"style\" lang=\"zh-CN\">helloworld </div> ";
string result = Regex.Replace(source, re, ">");
Response.Write(result);

Equn 2009-04-25
  • 打赏
  • 举报
回复
表达式:<(\w+)(?:\s*\w+=".*?"\s*)?(\s*id=".*?"\s*)(?:\s*\w+=".*?"\s*)?>(.*)</\1>
替换为:<$1 $2>$3</$1>

红色字符表示你要保留的属性。

$1可以替换成你需要的特定标签。
如:<div(?:\s*\w+=".*?"\s*)?(\s*id=".*?"\s*)(?:\s*\w+=".*?"\s*)?>(.*)</div>
替换为:<div$1>$2</div>
  • 打赏
  • 举报
回复
不熟悉正则,友情UP。

1楼的朋友,如果html不是符合w3c标准的xhtml,是无法使用xmldocument加载的。
也就根本无法使用XmlNode这类东东了。
LemIST 2009-04-25
  • 打赏
  • 举报
回复
use XML in c#.
Those classes may help here:
XmlDocument.
XmlElement.
XmlNode.

Check them in MSDN.

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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