求两个正规表达式

chyich 2003-05-13 01:32:59

从C/S中把一个word文档另存为html文档,把生成html文档存入sql server数据库的image字段中,并把
word文档生成html文档的图片文件也存入数据库另一个表的image字段中。现在asp.net中把html文档从数据库中读出到一个string型的变量中。html文档中用<img src=".....">来表示图片文件的链接。但路径不对,现在想用System.Text.RegularExpressions.Regex对象找到<img>标签,并把它的src属性替
换为正确的路径。
所以现在求两个正规表达式。
假设html代码为:
<table cellpadding=0 cellspacing=0 align=left>
<tr>
<td width=7 height=0></td>
</tr>
<tr>
<td></td>
<td><img width=609 height=396 src="temp.files/image002.gif" v:shapes="_x0000_s1026"></td>
</tr>
<tr>
<td></td>
<td><img width=609 height=397 src="temp.files/image004.gif" v:shapes="_x0000_s1027"></td>
</tr>
</table>
第一个表达式要求找到:
<img width=609 height=396 src="temp.files/image002.gif" v:shapes="_x0000_s1026">

<img width=609 height=397 src="temp.files/image004.gif" v:shapes="_x0000_s1027">
第二个表达式要求替换
<img width=609 height=396 src="temp.files/image002.gif" v:shapes="_x0000_s1026">
中的src属性。

我想可能一个正规表达式就能解决,但不知如何写这个正规表达式或程序。请教了,谢谢!

上述的只是我想的一个解决显示存在数据库中带有图片的html文档的解决方案,如果您有更好的解决方案,请贴上,我将另外开贴送分,以示酬谢。再次感谢!
...全文
126 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chyich 2003-05-15
  • 打赏
  • 举报
回复
to 楼上:
HTML格式的文档 --保存为-- DOC文档?
我也没做过,不知你是怎么做的?说说你的思路,大家讨论一下。
不过这个帖子要结了。所以先结了。谢谢龙人。
gOODiDEA 2003-05-14
  • 打赏
  • 举报
回复
我的想法是在B/S结构下:

HTML格式的文档 --保存为-- DOC文档

纯文本的很好办,但如果有<Table>或其他的Market,则在DOC也原封不动的<Table>,不知道有没有什么比较好的的办法.
jlhdlj 2003-05-14
  • 打赏
  • 举报
回复
up
chyich 2003-05-14
  • 打赏
  • 举报
回复
to 楼上:
我们现在都是在c/s程序下用vba调用word的功能把word文档转换成html文档。你想怎么样把HTML文档转成Word文档?

上面的问题我已经找到答案了,是在word文档转换成html文档时,它增加了一些代码,所有它不认,我手工的把哪些代码删除掉,就可以显示图片了,例:
<p class=MsoNormal><!--[if gte vml 1]><o:wrapblock><v:shapetype id="_x0000_t75"
coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"
filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
margin-left:5.25pt;margin-top:0;width:456.75pt;height:296.75pt;z-index:1'
o:allowincell="f">
<v:imagedata src="temp.files/image001.wmz" o:title=""/>
<w:wrap type="topAndBottom"/>
</v:shape><![if gte mso 9]><o:OLEObject Type="Embed" ProgID="Excel.Sheet.8"
ShapeID="_x0000_s1026" DrawAspect="Content" ObjectID="_1114259301">
</o:OLEObject>
<![endif]><![endif]--><![if !vml]><span style='mso-ignore:vglayout'>
<table cellpadding=0 cellspacing=0 align=left>
<tr>
<td width=7 height=0></td>
</tr>
<tr>
<td></td>
<td><img width=609 height=396 src="image002.gif" v:shapes="_x0000_s1026"></td>
</tr>
</table>
</span><![endif]><!--[if gte vml 1]></o:wrapblock><![endif]--><br
style='mso-ignore:vglayout' clear=ALL>

把上面所有用<!--><-->括起的代码删除掉就可以显示图片了。
gOODiDEA 2003-05-14
  • 打赏
  • 举报
回复
搭车问一下各位:把HTML文档转成Word文档时,除了替换标记法还有没有更简单一点的办法.
chyich 2003-05-13
  • 打赏
  • 举报
回复
我现在是这样写的:
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType=open_file_application(file_type(str_table_name,str_blob_column_name,str_select_condition));
System.IO.Stream fs=HttpContext.Current.Response.OutputStream;
int fileDataCol = 0;
Byte[] b = new Byte[(sdr_file.GetBytes(fileDataCol, 0, null, 0, int.MaxValue))];
sdr_file.GetBytes(fileDataCol, 0, b, 0, b.Length);
sdr_file.Close();
cyc_data.scn_databaseconnection.Close();
string s = System.Text.Encoding.Default.GetString(b);
//使用正规表达式找出<img>标签
string ex1 = "((?<=<img)[^>]*)";
string ex2 = "(?<=src=\")([^\"]*)\"";
MatchCollection matches = Regex.Matches(s,ex1,RegexOptions.IgnoreCase);
foreach( Match match in matches)
{

s=s.Replace(Regex.Match(match.Value,ex2,RegexOptions.IgnoreCase).Value,"img/03.gif")\"");
}
b=System.Text.Encoding.Default.GetBytes(s);
fs.Write(b,0,b.Length);
fs.Close();
HttpContext.Current.Response.End();
chyich 2003-05-13
  • 打赏
  • 举报
回复
谢谢龙人,已经替换过来了。再问一个问题,另外开贴送分。就是替换过来以后,我以流形式把html文件写到outputstream流中,应该说替换过来的文件路径是对的,文件也存在,但为什么还是不能正确的显示文件呢?我想它都能解释其它的html标签,应该也能显示出<img>。是不是与流有关?
dragontt 2003-05-13
  • 打赏
  • 举报
回复
string s = "<table cellpadding=0 cellspacing=0 align=left><tr><td width=7 height=0></td></tr><tr><td></td><td><img width=609 height=396 src=\"temp.files/image002.gif\" v:shapes=\"_x0000_s1026\"></td></tr><tr><td></td><td><img width=609 height=397 src=\"temp.files/image004.gif\" v:shapes=\"_x0000_s1027\"></td></tr></table>";

string ex1 = "((?<=<img)[^>]*)";
string ex2 = "(?<=src=\")([^\"]*)\"";
MatchCollection matches = Regex.Matches(s,ex1,RegexOptions.IgnoreCase);
foreach( Match match in matches)
{
MessageBox.Show( Regex.Match(match.Value,ex2,RegexOptions.IgnoreCase).Value );
}

你只用把messageBox.Show中改用Replace方法就好
chyich 2003-05-13
  • 打赏
  • 举报
回复
to mmkk():
我试了一下,可以替换,但还有一点不符合要求,就是它会把所有的html标签的src属都替换掉,有些是不需要替换的。我只希望替换掉<img>中的src属性。还有就是怎么用c#来实现。非常感谢!
doose 2003-05-13
  • 打赏
  • 举报
回复
到这里去找找看吧

http://www.regxlib.com/
mmkk 2003-05-13
  • 打赏
  • 举报
回复
马上要出去了,没有用C#写,直接用js写了一个,看看<textarea id="a1"><table cellpadding=0 cellspacing=0 align=left>
<tr>
<td width=7 height=0></td>
</tr>
<tr>
<td></td>
<td><img width=609 height=396 src="temp.files/image002.gif" v:shapes="_x0000_s1026"></td>
</tr>
<tr>
<td></td>
<td><img width=609 height=397 src="temp.files/image004.gif" v:shapes="_x0000_s1027"></td>
</tr>
</table></textarea>
<script>
alert(document.all.a1.innerText)
alert(document.all.a1.innerText.replace(/src=\"?([^\"]*)\"?/gi,function ($1){return "src=\"被替换后的图片地址\""}));
</script>
需要Jscript5.5(IE5.5)以上才能出效果

62,073

社区成员

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

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

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

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