跪求一个利用正则表达式分组替换!

让我带你走 2009-11-07 10:12:40
请大家帮忙。谢谢大家!
替换前:

<li>
<a href="#" ><img sc=""/></a>
<a href="#" >十一运会门票低价销售</a>
<p class="desc">青岛赛区票价均不高于上全运会</p>
</li>
<li>
<a href="#"><img sc=""/></a>
<a href="#">宝姿大型特卖会3到6折</a>
<p class="desc">您想品尝香浓幼滑的特色</p>
</li>

替换后:

<li>
<a href="#" id="href1" ctype="image"><img sc=""/></a>
<a href="#" id="href2" ctype="href">十一运会门票低价销售</a>
<p class="desc" style="cursor:pointer" id="desc1" ctype="desc">青岛赛区票价均不高于上全运会</p>
</li>
<li>
<a href="#" id="href3" ctype="image"><img sc=""/></a>
<a href="#" id="href4" ctype="href">宝姿大型特卖会3到6折</a>
<p class="desc" style="cursor:pointer" id="desc2" ctype="desc">您想品尝香浓幼滑的特色</p>
</li>

难点:
1.当a标签中间是文字的时候,那么这个a标签的ctype等于href
2.如果当a标签中间是图片的时候,那么这个a标签的ctype等于image
3.如果P标签的class等于desc的时候,p标签就加上“style="cursor:pointer"”,且ctype等于desc
4.所有的a标签和p标签id是顺序替换的从href/desc+序号
...全文
209 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
让我带你走 2009-11-07
  • 打赏
  • 举报
回复
贴一下思路吧!我是想做一个类似于模板引擎的东西!根据html页面生成aspx页面 aspx输入值就替换了html的东西

1.
替换前:纯html 开始也是最终的结果 此处始终为静态页

<li>
<a href="http://www.abc.com" ><img sc=""/></a>
<a href="http://www.abc.com" >十一运会门票低价销售</a>
<p class="desc">青岛赛区票价均不高于上全运会</p>
</li>
<li>
<a href="http://www.abc.com"><img sc=""/></a>
<a href="http://www.abc.com">宝姿大型特卖会3到6折</a>
<p class="desc">您想品尝香浓幼滑的特色</p>
</li>

2. 直接生成aspx页,同时生成,修改时修改步骤1页面就生成步骤2的aspx页面
[/code]
替换后:aspx页面的能看见部分

<li>
<a href="#" id="href1" ctype="image"><img sc=""/></a>
<a href="#" id="href2" ctype="href">文字1</a>
<p class="desc" id="desc1" ctype="desc">描述1</p>
</li>
<li>
<a href="#" id="href3" ctype="image"><img sc=""/></a>
<a href="#" id="href4" ctype="href">文字2</a>
<p class="desc" id="desc2" ctype="desc">描述2</p>
</li>

替换后:aspx页面的隐藏部分
<div id="href1div" style="display:none">
标题:<input type="text" id="href1text" runat="server"><br/>
链接:<input type="text" id="href1link" runat="server">
</div>
3生成一个带标签的html存入数据库
[code=HTML]
<li>
<a href="{input_index_food_href1}" ><img src="{input_index_food_image1}"/></a>
<a href="{input_index_food_href2}" >{input_index_food_char1}</a>
<p class="desc" style="cursor:pointer" id="desc1" ctype="desc">{input_index_food_desc1}</p>
</li>
<li>
<a href="{input_index_food_href3}" ><img sc="{input_index_food_image2}"/></a>
<a href="{input_index_food_href4}" >{input_index_food_char2}</a>
<p class="desc">{input_index_food_desc2}</p>
</li>
4.执行步骤2生成的aspx页面的时候将内容替换,并生成静态页且替换掉步骤1的html,然后再执行一次2步骤,确保修改时看到的是上次保存的内容

难点:
1.当a标签中间是文字的时候,那么这个a标签的ctype等于href,且将里面的内容替换成“文字+序号”
2.如果当a标签中间是图片的时候,那么这个a标签的ctype等于image
3.如果P标签的class等于desc的时候,p标签就加上“style="cursor:pointer"”,且ctype等于desc,并将里面的内容替换成“描述+序号”
4.将所有href中的值全部替换成“#”
5.所有的a标签和p标签id是顺序替换的从href/desc+序号,文字部分也是顺序生成的a标签里面的内容就是:文字+序号,p标签的内容就是:描述+序号


让我带你走 2009-11-07
  • 打赏
  • 举报
回复
又是过客兄!小女在这里有理了!
-过客- 2009-11-07
  • 打赏
  • 举报
回复
加班中,现在没时间,中午给你搞定
让我带你走 2009-11-07
  • 打赏
  • 举报
回复
大家帮一下我啊!谢谢啊
让我带你走 2009-11-07
  • 打赏
  • 举报
回复
谢谢了!牛人兄啊!
-过客- 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pentiunsky 的回复:]
是啊 都换掉
还有刚才忘记说了能不能把所有href=""值都替换成“#”
[/Quote]

            string test = @"<li>
<a href=""http://www.abc.com"" ><img sc=""""/></a>
<a href=""http://www.abc.com"" >十一运会门票低价销售</a>
<p class=""desc"">青岛赛区票价均不高于上全运会</p>
</li>
<li>
<a href=""http://www.abc.com""><img sc=""""/></a>
<a href=""http://www.abc.com"">宝姿大型特卖会3到6折</a>
<p class=""desc"">您想品尝香浓幼滑的特色</p>
</li>";
int hNum, pNum;
hNum = pNum = 0;
string temp = string.Empty;
Regex regA = new Regex(@"(?i)href=""[^""]*""");
Regex reg = new Regex(@"(?is)(?<he><(?<tag>[ap])\b\s*(?<cl>class=""desc"")?[^>]*)>(?<en>\s*(?<img><img[^>]*>)?(?:(?!</?[ap]\b).)*</[ap]>)");
string result = reg.Replace(test, delegate(Match m)
{
temp = m.Groups["he"].Value;
if (m.Groups["tag"].Value.ToLower() == "a")
{
hNum++;
temp = regA.Replace(temp, "href=\"#\"") + " id=\"href" + hNum + "\"";
if (m.Groups["img"].Value != "")
{
temp += " ctype=\"image\">";
}
else
{
temp += " ctype=\"href\">";
}
}
else if (m.Groups["tag"].Value.ToLower() == "p")
{
pNum++;
if(m.Groups["cl"].Value != "")
{
temp += " style=\"cursor:pointer\"";
}
temp += " id=\"desc" + pNum + "\" ctype=\"desc\">";
}
return temp + m.Groups["en"].Value;
});
richTextBox2.Text = result;
/*------------输出-------------
<li>
<a href="#" id="href1" ctype="image"><img sc=""/></a>
<a href="#" id="href2" ctype="href">十一运会门票低价销售</a>
<p class="desc" style="cursor:pointer" id="desc1" ctype="desc">青岛赛区票价均不高于上全运会</p>
</li>
<li>
<a href="#" id="href3" ctype="image"><img sc=""/></a>
<a href="#" id="href4" ctype="href">宝姿大型特卖会3到6折</a>
<p class="desc" style="cursor:pointer" id="desc2" ctype="desc">您想品尝香浓幼滑的特色</p>
</li>
*/
让我带你走 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yyz985 的回复:]
href=""替换成href="javascript:;"
[/Quote]
这样也行 反正目的就是不要跳转 而且出现手型
yyz985 2009-11-07
  • 打赏
  • 举报
回复
href=""替换成href="javascript:;"
让我带你走 2009-11-07
  • 打赏
  • 举报
回复
是啊 都换掉
还有刚才忘记说了能不能把所有href=""值都替换成“#”
jiangshun 2009-11-07
  • 打赏
  • 举报
回复
把ID和ctype都替换掉嘛?
-过客- 2009-11-07
  • 打赏
  • 举报
回复
try...

            string test = @"<li>
<a href=""#"" ><img sc=""""/></a>
<a href=""#"" >十一运会门票低价销售</a>
<p class=""desc"">青岛赛区票价均不高于上全运会</p>
</li>
<li>
<a href=""#""><img sc=""""/></a>
<a href=""#"">宝姿大型特卖会3到6折</a>
<p class=""desc"">您想品尝香浓幼滑的特色</p>
</li>";
int hNum, pNum;
hNum = pNum = 0;
string temp = string.Empty;
Regex reg = new Regex(@"(?is)(?<he><(?<tag>[ap])\b\s*(?<cl>class=""desc"")?[^>]*)>(?<en>\s*(?<img><img[^>]*>)?(?:(?!</?[ap]\b).)*</[ap]>)");
string result = reg.Replace(test, delegate(Match m)
{
temp = m.Groups["he"].Value;
if (m.Groups["tag"].Value.ToLower() == "a")
{
hNum++;
temp += " id=\"href" + hNum + "\"";
if (m.Groups["img"].Value != "")
{
temp += " ctype=\"image\">";
}
else
{
temp += " ctype=\"href\">";
}
}
else if (m.Groups["tag"].Value.ToLower() == "p")
{
pNum++;
if(m.Groups["cl"].Value != "")
{
temp += " style=\"cursor:pointer\"";
}
temp += " id=\"desc" + pNum + "\" ctype=\"desc\">";
}
return temp + m.Groups["en"].Value;
});
richTextBox2.Text = result;
/*------------输出-------------
<li>
<a href="#" id="href1" ctype="image"><img sc=""/></a>
<a href="#" id="href2" ctype="href">十一运会门票低价销售</a>
<p class="desc" style="cursor:pointer" id="desc1" ctype="desc">青岛赛区票价均不高于上全运会</p>
</li>
<li>
<a href="#" id="href3" ctype="image"><img sc=""/></a>
<a href="#" id="href4" ctype="href">宝姿大型特卖会3到6折</a>
<p class="desc" style="cursor:pointer" id="desc2" ctype="desc">您想品尝香浓幼滑的特色</p>
</li>
*/

62,266

社区成员

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

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

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

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