请教正则表达式的问题

51dianying 2006-04-12 04:49:37
我有一些网页要过滤掉html代码,但要保留img,table,tr,td这些标签.

用的正则为:<[^(IMG|td|table|tr)]+?>",但实际效果是<div去不掉.请教如果要去掉<div></div>,需要如何做改动?



目前用的代码如下:

private void button1_Click(object sender, System.EventArgs e)
{
string x = " <div id=docContent><div align=center id=docSubject style='font-size:14.8px;line-height:22px'><b>巴曙松:票据市场发展路径选择</b></div><div align=center id=docDelivedDate style='font-size:12px;line-height:22px'>2005-1-4</div><div id=docContent style='font-size:14.8px;line-height:18px'><P>  国内外票据市场发展路径差异成因</P>"+
"<P>  我国票据市场的发展路径不同于西方票据市场,其深层次的原因包括制度、环境以及资源对票据市场的影响,具体体现为:</P>"+
"<P>  票据市场产生的动因不同。西方成熟票据市场的建立主要是为了满足企业融资的需要,在取得贷款成本较高的情况下,为融资企业提供了另一种获得短期资金的途径,商业票据由一种商品支付手段转化为银行短期贷款的替代形式。我国的票据市场最初是为了解决企业之间相互拖欠货款设立的,是在信用缺失的背景下,作为建立企业之间信用关系的工具而产生的。所以说,两条路径起点的不同就决定了今后不同的发展方向。西方票据市场更强调为资金的流动拓宽渠道,市场初期的参与主体大多是急需资金进一步发展的企业,他们的资信程度比较高,不需要真实贸易背景作为依据;而我国的票据市场最初的动因是为了弥补信用体系的缺陷,这就决定了在起步的时候,市场参与主体普遍存在信用缺失的问题,所以对票据的真实贸易背景进行了强制规定。</P>"+
"<P>  票据市场发展的内在动力不同。西方票据市场的内在推动者是其较为完善的市场机制。首先,通过准入退出制度的建立对票据市场的参与者进行严格把关;其次,完全依靠市场的供求关系形成合理的利率水平和价格水平;另外,由于大多数西方票据市场都有票据专营机构作为做市商发挥中介作用,所以为商业承兑汇票公平交易提供了交易平台,为整个票据市场的运作提供了公平、合理、透明的交易载体,不再将经营票据局限于银行。</P>"+
"<P>  相比之下,我国票据市场化程度偏低,企业往往更愿意接受银行承兑汇票获得信用保证,形成了“企业高度依赖商业银行,商业银行高度依赖中央银行”的局面。票据市场的风险集中在银行体系,银行承兑汇票承担了不符合自身风险收益特性的责任。在这种情况下,商业承兑汇票发展缓慢,制约了整个票据市场的发展规模以及货币政策传导的有效性。</P>"+
"<P>  票据市场发挥的功能不同。西方成熟的票据市场作为调节短期资金供需的场所,其主要职能是为各经济主体<table>提供有效的调整流动资本的手段,是货币当局和金融体系之间的一条主要联系渠道。同时,票据市场的运作也为其他货币子市场和资本市场的正常运作提供了资金支持。因为企业获得的短期融资有利于其长远发展,通过业务规模的扩大,经营业绩的提高建立良好的市场信誉,从而有利于通过发行债券、股票等权益性证券进行长期融资。而我国的票据市场相对于其他货币子市场的发展来说,由于市场化程度较低,没有发挥其短期融资的功能,相反,一些企业通过虚假的票据贴现,将所获资金投放到资本市场进行违规运作。</P>"+
"<P>  票据市场的载体不同。西方票据市场以中介机构为载体,中介机构根据票据的评级、贴现以及承兑等不同环节而分别设置,将票据市场供求双方有机地联系起来。由于中介机构形成了一个互相制约的整体,所以中央银行通过这个中介体系传导货币政策的效果比较显著,减少了个别机构发生道德风险的可能性。而由于我国票据市场以银行为载体,银行身兼数职,而各银行由于利益趋同,很难形成相互制约的机制,在追求存贷款规模、降低不良资产率的目标下,容易与其他目标发生冲突。显然,作为票据交易的一方,很难公正、客观地独立承担起票据市场载体的任务。这同时导致了我国票据市场以银行承兑汇票为主的格局,银行承兑汇票在执行了支付、融资、传导货币政策等职能之外,还承载了票据市场需求双方的全部利益。</P>"+
"<P>  我国票据市场未来发展路径选择</P>"+
"<P>  扩大票据市场工具种类,拓宽投资者范围。扩大票据的种类和数量,一方面满足企业以商品交易为主的交易性票据的有效需求,另一方面促使商业银行的短期资金票据化,发展融资性票据业务。充分发挥票据在承兑、信用、支付、汇兑、结算、融资等方面的功能,提高资金周转速度,从而使更多企业通过票据市场进行融资。另外,注重票据市场工具的创新,积极推出针对不同企业的个性化服务,制定相应的打包服务。适当提高商业票据融资的比例,适时引入诸如投资基金、保险公司等机构投资者。</P>"+
"<P>  完善票据利率的市场化形成机制,有效传导货币政策。逐渐形成银行贷款利率、商业票据贴现率、同业拆借利率和中央银行再贴现利率之间的合理利率价格级差,使其再贴现利率能更好地发挥杠杆作用和货币信号作用,为市场利率正常水准提供一个参照系。由于再贴现是以票据为抵押,资产风险低于再贷款,所以再贴现利率应低于同档再贷款利率。我国目前的再贴现利率偏高,调整幅度小、频率低,其根本原因在于再贷款利率决定的市场化不够,国家通过再贴现率调整货币市场的效果被降低;票据市场的参与者往往另辟蹊径将票据转贴,在这种情况下,需要逐步推进票据利率的市场化进程,通过建立统一的票据市场,形成能够真正反映资金供求状况的市场化贴现率。</P>"+
"<P>  发展活跃的票据中介机构。国际上,票据业务的经营一般有三种模式:第一类并无专业的票据公司,<td>而<t>是将票据业务作为商业银行或投资银行业务的一部分来经营。目前我国大多数商业银行的票据业务都采取这种经营方式。第二类是票据业务均有专门、独立的机构经营,如美国的票据业务主要有投资银行的全资子公司进行经营;英国的票据贴现所发展成为商人银行;日本的票据业务则由银行兼营模式发展成为专业的短资公司。第三类是以我国台湾为代表的专业票券金融公司。从发展趋势上看,以商业银行为依托的专业票据公司模式是一个较为理性的选择。 </P></div><p><div align=right id=docAuthor style='font-size:12px;line-height:18px;height:20px;'><B> 作者:</B>国务院发展研究中心金融研究所副所长巴曙松</div><div align=right id=docEditor style='height:20px;font-size:12px;line-height:18px'><B>责任编辑:</B>A </div></p></div>";
this.textBox1.Text = this.FilterHTML("<I src=i.jpg><Table><td>"+x);
}
public string FilterHTML(string strHtml)
{
System.Text.RegularExpressions.Regex objRegExp = new System.Text.RegularExpressions.Regex("<[^(IMG|td|table|tr)]+?>",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
strHtml = objRegExp.Replace(strHtml," - ");

strHtml = strHtml.Replace(" "," ");
// System.Text.RegularExpressions.MatchCollection x = objRegExp.Matches(strHtml);
// foreach(System.Text.RegularExpressions.Match c in x)
// {
// strHtml = strHtml.Replace(c.ToString(),"");
// }
return strHtml;
}
}
}
...全文
133 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
51dianying 2006-04-13
  • 打赏
  • 举报
回复
现在用的<([^I]|[^T])[^>]+>基本达到目的.
qlwuu 2006-04-12
  • 打赏
  • 举报
回复
好像没法直接过滤,做两次分析吧,先分析html标记,然后只保留想要的
mobydick 2006-04-12
  • 打赏
  • 举报
回复
string regexStr = @"<[^>]+>";
string temp = Regex.Replace(yourStr, regexStr, String.Empty);
51dianying 2006-04-12
  • 打赏
  • 举报
回复
恩,不是我想要的,但我水平有限,所以请教大家.

我想去掉除了<img <table <tr <td之外所有的html代码.
止戈而立 2006-04-12
  • 打赏
  • 举报
回复
Regex objRegExp=new Regex(@"<.*?>",RegexOptions.Singleline);
止戈而立 2006-04-12
  • 打赏
  • 举报
回复
依我看,你想要去掉的只不过是所有的<>吧?
那这样就可以了。。
Regex objRegExp=new Regex(@"<.*?>");
止戈而立 2006-04-12
  • 打赏
  • 举报
回复
楼主的正则表达式写得好离谱。。。
"<[^(IMG|td|table|tr)]+?>"这样写是大错特错。。
它的意思是匹配一个<>,然后里面的字符不包含你上面那一段IMG|td|table|tr中的任何一个字符就行了。。。这是你想要的吗?
51dianying 2006-04-12
  • 打赏
  • 举报
回复
恩,是<div> 不过后面可能有别的内容,比如 <div id=....>所以我用<div代替了.

上面的文章内容就是我测试的代码.
chengbo1983 2006-04-12
  • 打赏
  • 举报
回复
只是<div ?
不是<div> ?
51dianying 2006-04-12
  • 打赏
  • 举报
回复
多谢楼上.不过和我的没有区别,<div去不掉.
chengbo1983 2006-04-12
  • 打赏
  • 举报
回复
/<(.*)>.*<\/\1>|<(.*) \/>/

110,538

社区成员

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

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

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