首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

求正则表达式 VS2005的正则表达式替换,该怎么处理

2012-01-21 
求正则表达式 VS2005的正则表达式替换下面是WebSvc代理类的代码[System.Web.Services.Protocols.SoapRpcMe

求正则表达式 VS2005的正则表达式替换
下面是WebSvc代理类的代码

                [System.Web.Services.Protocols.SoapRpcMethodAttribute( "WSFacade ",   RequestNamespace= "http://www.sb3.services1.extend.com/jboss-net/services/WSFacade ",   ResponseNamespace= "http://www.sb3.services1.extend.com/jboss-net/services/WSFacade ")]
                [return:   System.Xml.Serialization.SoapElementAttribute( "createCustomerReturn ")]
                public   ProfileTO   createCustomer(string   accountAltcode,   ProfileTO   profile)   {
                        object[]   results   =   this.Invoke( "createCustomer ",   new   object[]   {
                                                accountAltcode,
                                                profile});
                        return   ((ProfileTO)(results[0]));
                }


要求替换为:
                [System.Web.Services.Protocols.SoapRpcMethodAttribute( "WSFacade ",   RequestNamespace= "http://www.sb3.services1.extend.com/jboss-net/services/WSFacade ",   ResponseNamespace= "http://www.sb3.services1.extend.com/jboss-net/services/WSFacade ")]
                [return:   System.Xml.Serialization.SoapElementAttribute( "createCustomerReturn ")]
                [TraceExtensionAttribute(LogDirectory   =   "ExtendMedia ",   EventType   =   "createCustomer ")]
                public   ProfileTO   createCustomer(string   accountAltcode,   ProfileTO   profile)   {
                        object[]   results   =   this.Invoke( "createCustomer ",   new   object[]   {
                                                accountAltcode,
                                                profile});
                        return   ((ProfileTO)(results[0]));
                }

我现在使用的正则式为:
匹配:public   {[^\s]+}   {[^\(]+}\(
替换为:[TraceExtensionAttribute(LogDirectory= "ExtendMedia ",EventType= "\2 ")]\n\t\tpublic   \1   \2\     (


这个替换能够工作,但是它替换了很多不该替换的函数,
我想再加一个条件,函数前面有   [System.Web.Services.Protocols.SoapRpcMethodAttribute   属性的函数才替换,但是一直改不好....

[解决办法]
这个表达式是用VS2005的查找替换工具替换的
-----------------------------------------
才看明白,我说你所用的替换表达式怎么不符合正则规则呢

我的解决办法是这样的,其中method 为变化的函数名称


string yourStr = richTextBox1.Text;
string method = textBox1.Text;
string resultStr = Regex.Replace(yourStr, @ "([System\.Web\.Services\.Protocols\.SoapRpcMethodAttribute[\s\S]*?)(public[\s\S]*?$) ", "$1[TraceExtensionAttribute(LogDirectory = \ "ExtendMedia\ ", EventType = \ " "+method+ "\ ")]\n\t$2 ", RegexOptions.IgnoreCase); richTextBox2.Text = resultStr;
richTextBox2.Text = resultStr;


就是把整个类的内容做为一个字符串,处理之后,再粘贴回去,更直接或是更好的办法我也不知道该怎么办了,试下吧

热点排行