请正则大人帮忙写个正则表达式

leisureftso 2010-06-02 06:29:30
现有一段HTML代码,例如:

<A class=gjzgl20100601_reserved href="http://www.xxx.com/html/NewShow_78260_1.htm" target=_blank><FONT color=#800000>ttttt</FONT></A>ttttt<A class=gjzgl20100601_reserved href="http://www.xxx.com/html/NewShow_78260_1.htm" target=_blank><FONT color=#800000>ttttt</FONT></A>ddddd  dddddddfdf  dddddttttt


现急需写一个正则表达式,要求能匹配查找该段HTML代码中的ttttt ,但是要注意HTML代码中已经设为超链接的ttttt不有被匹配上,也就是说在上面这段HTML代码中只能匹配上两次ttttt(该代码中ttttt实际出现过三次)

谢谢!
...全文
183 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
leisureftso 2010-06-03
  • 打赏
  • 举报
回复
OK了
谢谢客客师傅!!!
谢谢wuyazhe !!!
谢谢大家!!!
兔子-顾问 2010-06-03
  • 打赏
  • 举报
回复
不对。忽略21楼回复吧。折腾这么多。。。
还是客客师傅的对。你看看


private static void TestRegex16()
{
string yourStr = @"<A class=gjzgl20100601_reserved href=""http://www.xxx.com/html/NewShow_78260_1.htm"" target=_blank><FONT color=#800000>ttttt</FONT></A>ttttt<A class=gjzgl20100601_reserved href=""http://www.xxx.com/html/NewShow_78260_1.htm"" target=_blank><FONT color=#800000>ttttt</FONT></A>ddddd  dddddddfdf  dddddttttt";
string key = "ttttt";
//Regex reg = new Regex(@"(?is)(?<=</a>.+?)ttttt");
//Regex reg = new Regex(@"(?is)(?:^|</a>)(?:(?!</?a\b).)+(?:<a\b|$)");
Regex reg = new Regex(@"(?is)(?<=^|</a>)(?:(?!</?a\b).)+(?=<a\b|$)");
string result = reg.Replace(yourStr, delegate(Match m) { return m.Value.Replace(key, "******"); });
Console.WriteLine(result);
}


测试文本
<A class=gjzgl20100601_reserved href="http://www.xxx.com/html/NewShow_78260_1.htm" target=_blank><FONT color=#800000>ttttt</FONT></A>ttttt<A class=gjzgl20100601_reserved href="http://www.xxx.com/html/NewShow_78260_1.htm" target=_blank><FONT color=#800000>ttttt</FONT></A>ddddd  dddddddfdf  dddddttttt

结果
<A class=gjzgl20100601_reserved href="http://www.xxx.com/html/NewShow_78260_1.htm" target=_blank><FONT color=#800000>ttttt</FONT></A>******<A class=gjzgl20100601_reserved href="http://www.xxx.com/html/NewShow_78260_1.htm" target=_blank><FONT color=#800000>ttttt</FONT></A>ddddd  dddddddfdf  ddddd******
mailbao 2010-06-03
  • 打赏
  • 举报
回复
借問下,誰是正則大人???
-过客- 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 leisureftso 的回复:]
比如说
<a href="test.htm" target=_blank><font color=#800000>ttttt</font></a>tttttdddddfdsfdf

我要的结果是正则表达式可以匹配到上面ttttt第二次出现的位置,第一次出现的位置被包含在<a>标签内不需要匹匹配上。例如,我想通过一个正则表达式把上面的ttttt替换成AAAAA,结果应该是:
<a href=……
[/Quote]
我在2楼所给正则是满足你这个需求的
string test = "<a href=\"test.htm\" target=_blank><font color=#800000>ttttt</font></a>tttttdddddfdsfdf";
string key = "ttttt";
Regex reg = new Regex(@"(?is)(?:^|</a>)(?:(?!</?a\b).)+(?:<a\b|$)");
string result = reg.Replace(test, delegate(Match m) { return m.Value.Replace(key, "AAAAA"); });
richTextBox2.Text = result;
/*-------输出---------
<a href="test.htm" target=_blank><font color=#800000>ttttt</font></a>AAAAAdddddfdsfdf
*/


如果说不满足你顶楼所给例子,那给出你要的结果,方便测试
兔子-顾问 2010-06-03
  • 打赏
  • 举报
回复
这样试试?
private static void TestRegex16()
{
string yourStr = @"<A class=gjzgl20100601_reserved href=""http://www.xxx.com/html/NewShow_78260_1.htm"" target=_blank><FONT color=#800000>ttttt</FONT></A>ttttt<A class=gjzgl20100601_reserved href=""http://www.xxx.com/html/NewShow_78260_1.htm"" target=_blank><FONT color=#800000>ttttt</FONT></A>ddddd  dddddddfdf  dddddttttt";
string key = "ttttt";
Regex reg = new Regex(@"(?is)(?<=</a>.+?)ttttt");
string result = reg.Replace(yourStr, "*****");
Console.WriteLine(result);
}
hhxx_cj 2010-06-03
  • 打赏
  • 举报
回复
呵呵,一路飘过,帮你顶顶

用的不好

不过我提意你可以根据他们给的改改,应该就可以实现了

祝你好运
leisureftso 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wuyazhe 的回复:]
这样说来,客客师傅给的貌似就是你要的效果了?
[/Quote]

下面是替换前的代码串
<A class=gjzgl20100601_reserved href="http://www.xxx.com/html/NewShow_78260_1.htm" target=_blank><FONT color=#800000>ttttt</FONT></A>ttttt<A class=gjzgl20100601_reserved href="http://www.xxx.com/html/NewShow_78260_1.htm" target=_blank><FONT color=#800000>ttttt</FONT></A>ddddd  dddddddfdf  dddddttttt


下面是用客客师傅写的正则表达式替换后的字符串(把不在<a>标签里的ttttt替换成test)
<A class=gjzgl20100601_reserved href="http://www.xxx.com/html/NewShow_78260_1.htm" target=_blank><FONT color=#800000>ttttt</FONT>test class=gjzgl20100601_reserved href="http://www.xxx.com/html/NewShow_78260_1.htm" target=_blank><FONT color=#800000>ttttt</FONT>test


明显不对
兔子-顾问 2010-06-03
  • 打赏
  • 举报
回复
这样说来,客客师傅给的貌似就是你要的效果了?
leisureftso 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wuyazhe 的回复:]
汗,早说么。显然给你的正则有2个。你如果完整的用我贴的例子是看到<FONT>标签去掉了的,一步是去不完整的。你一定只测试了一个。没完整测试。
[/Quote]

喔,我是只试了一步,用Regex Tester试的
leisureftso 2010-06-03
  • 打赏
  • 举报
回复
比如说
<a href="test.htm" target=_blank><font color=#800000>ttttt</font></a>tttttdddddfdsfdf

我要的结果是正则表达式可以匹配到上面ttttt第二次出现的位置,第一次出现的位置被包含在<a>标签内不需要匹匹配上。例如,我想通过一个正则表达式把上面的ttttt替换成AAAAA,结果应该是:
<a href="test.htm" target=_blank><font color=#800000>ttttt</font></a>AAAAAdddddfdsfdf
醒子宇 2010-06-03
  • 打赏
  • 举报
回复
学习了 wuyazhe 顶`
兔子-顾问 2010-06-03
  • 打赏
  • 举报
回复
汗,早说么。显然给你的正则有2个。你如果完整的用我贴的例子是看到<FONT>标签去掉了的,一步是去不完整的。你一定只测试了一个。没完整测试。
leisureftso 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wuyazhe 的回复:]
我猜测的意思你要的是
1.<a...>这里的内容</a>
2.但是这里的内容中的html标签要去掉。

如果我理解的不对,你要重新说明白你要什么。
[/Quote]

我是要匹配不在<a></a>标签里面的ttttt,您上面写的那个刚好反了
leisureftso 2010-06-03
  • 打赏
  • 举报
回复
To wuyazhe :不好意思啊,又看错了
我试过了,你帮我写的这个正则可以匹配在<a>标签里的ttttt(而且匹配出来的结果没过滤掉<FONT>标记),不在<a>标签里的反而没匹配上

我是想匹配上不在<a>标签里面的ttttt

谢谢!
NewUser2008 2010-06-03
  • 打赏
  • 举报
回复
upup
兔子-顾问 2010-06-03
  • 打赏
  • 举报
回复
我猜测的意思你要的是
1.<a...>这里的内容</a>
2.但是这里的内容中的html标签要去掉。

如果我理解的不对,你要重新说明白你要什么。

leisureftso 2010-06-03
  • 打赏
  • 举报
回复
还有,过客师傅说的对,是我看错了,代码里面确实是有两次ttttt出现在<a>标签里面,两次不在<a>标签里面
兔子-顾问 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 leisureftso 的回复:]
谢谢大家的回复
过客师傅的我试过了,好像不行
To wuyazhe : 在实际情况下

HTML code
href="http://www.xxx.com/html/NewShow_78260_1.htm"

这段代码中的链接地址也并不是固定的,其它的部分可以固定
[/Quote]

我给你的回复根本没限制href的内容和位置。。。
leisureftso 2010-06-03
  • 打赏
  • 举报
回复
谢谢大家的回复
过客师傅的我试过了,好像不行
To wuyazhe : 在实际情况下
href="http://www.xxx.com/html/NewShow_78260_1.htm"

这段代码中的链接地址也并不是固定的,其它的部分可以固定
兔子-顾问 2010-06-03
  • 打赏
  • 举报
回复
呵呵。估计你看错行了。分给到楼上去了。
加载更多回复(6)

110,533

社区成员

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

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

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