日期:2014-05-17  浏览次数:20650 次

用正则表达式怎么把下面内容全给替换成相应的动态内容
替换规则:
 只要是以<img src="Control 开头的 图片 全进行替换
举列:
有如下字符串
 <img src="Control/TextBox.gif" id="img002" cid="demo_001" ToolTip="文本框提示" Width="222" />
....
 <img src="Control/TextBox.gif" id="img003" cid="demo_002" ToolTip="文本框提示" Group="one" IsM="True" />
 要替换成
 <ST:TextBox ID="demo_001" runat="server" ToolTip="文本框提示" Width="222"></ST:TextBox>
....
 <ST:TextBox ID="demo_002" runat="server" ToolTip="文本框提示" Group="one" IsM="True"></ST:TextBox>

特别说明:
img 里的 id  转换成 控件时 就消失了 而img里cid属性 变成了 控件的id
转换控件时增加了runat="server"
img 里 除了 cid属性是固定的 其它 如 ToolTip Width 之类的都是动态的可能有N多种属性,这里一定得动态替换,希望能用一条语句实现,还有希望能给出逆向转换

参考正则:
图片转控件时
str = Regex.Replace(str, @"(?is)<img(?=[^>]*?src=""Control/([^""\.]+)[^""]*"")(?=[^>]*?title=""([^""]+)"")(?=[^>]*?alt=""([^""]+)"")(?=[^>]*?width:([^"";]+))(?=[^>]*?height:([^"";]+))[^>]*>", "<ST:$1 ID=\"$2\" runat=\"server\" ToolTip=\"$3\" Width=\"$4\" Height=\"$5\"></ST:$1>");
控件转图片时
str = Regex.Replace(str, @"(?is)<ST:(\w+)(?=[^>]*?id=""([^""]+)"")(?=[^>]*?ToolTip=""([^""]+)"")(?=[^>]*?Height=""([^""]+)"")(?=[^>]*?Width=""([^""]+)"")[^>]*></ST:\1>", "<img src=\"Control/$1.gif\" id=\"$2\" title=\"$2\" alt=\"$3\" style=\"width:$5;height:$4;\" />");

这里实现了固定属性的转法,现在想实现的 属性是不可知的 动态的,只有cid是可知的,该怎么实现




 
该怎么用正规表达式去替换,请高手指点。。。。 

------解决方案--------------------
yourstr=Regex.Replace(yourstr,@"(?i)<img\b[^>]*?src=""Control[^""]+""[^>]*?cid=(""[^""]+"")\s*([^>]*?)>","<ST:TextBox ID=$1 runat=\"server\" $2></ST:TextBox>");
------解决方案--------------------
		string s = @"<img src=""Control/TextBox.gif"" id=""img002"" cid=""demo_001"" ToolTip=""文本框提示"" Width=""222"" />
....
 <img src=""Control/TextBox.gif"" id=""img003"" cid=""demo_002"" ToolTip=""文本框提示"" Group=""one"" IsM=""True"" />";
string r = Regex.Replace(s, @"(?is)<img *src=""Control.+?cid=("".+?"") *(ToolTip="".+?"")? *(Width="".+?"")?.*?/>", @"<ST:TextBox ID=$1 runat=""server"" $2 $3></ST:TextBox>");
Response.Write(Server.HtmlEncode(r));

输出:
<ST:TextBox ID="demo_001" runat="server" ToolTip="文本框提示" Width="222"></ST:TextBox> .... <ST:TextBox ID="demo_002" runat="server" ToolTip="文本框提示" ></ST:TextBox>