求正则表达式 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;
就是把整个类的内容做为一个字符串,处理之后,再粘贴回去,更直接或是更好的办法我也不知道该怎么办了,试下吧