把左边的字符串处理为右边的字符串
如:2+sqrt(2)*5               ->    2+Math.Sqrt(2)*5
sQRt(13)-e                ->    Math.Sqrt(13)-Math.E
maTH.cOs(7)               ->    Math.Cos(7)
1-Math.Sin(13)*7          ->    1-Math.Sin(13)*7
65-roUNd(5)+MAtH.sQRT(8)  ->    65-Math.Round(5)+Math.Sqrt(2)相信大家已明白我的意思,请写出全整代码,谢谢

解决方案 »

  1.   

    trystring yourStr = ..............;
    string result = Regex.Replace(yourStr, @"(math\.)?(?<pre>[a-z])(?<con>[a-z]+\(\d+\))", new MatchEvaluator(regReplace), RegexOptions.IgnoreCase);
    private string regReplace(Match m)  
    {
        return "Math." + m.Groups["pre"].Value.ToUpper() + m.Groups["con"].Value.ToLower();
    }
    只能处理你例子所给情况,无法处理DivRem()、GetHashCode()等情况,如果要处理这种情况,需要做进一步的处理  
      

  2.   

    就是引用已匹配的,(你自定义了pre,con等,我是说不定义,用本来的\1\2怎么操作?
    是这样么:
    string yourStr = ..............;
    string result = Regex.Replace(yourStr.ToLower(), @"(math\.)?([a-z])([a-z]+\(\d+\))", new MatchEvaluator(regReplace));
    private string regReplace(Match m)  
    {
        return "Math." + m.Groups[2].Value.ToUpper() + m.Groups[3].Value.ToLower();
    }
      

  3.   

    另外,C#可不可以匹配字母,大写字母等等,你看TextPro里面很多的:半角部分: 
               .(句点)   匹配任何字符; 
               \a        匹配任意英文字母; 
               \~a       匹配除字母外的任意字符; 
               \d        匹配任意数字; 
               \~d       匹配除数字外的任意字符; 
               \h        匹配任意词首字符(字母及下划线); 
               \~h       匹配除字母及下划线以外的任意字符; 
               \l        匹配任意小写字母; 
               \~l       匹配除小写字母外的任意字符; 
               \o        匹配任意八进制数字相匹配(0-7); 
               \~o       匹配除八进制数字外的任意字符; 
               \p        匹配任意半角标点符号; 
               \~p       匹配除半角标点以外的任意字符; 
               \s        匹配任意空白字符(空格、TAB); 
               \~s       匹配任意非空白字符; 
               \u        匹配任意大写字母; 
               \~u       匹配除大写字母外的任意字符; 
               \w        匹配可成词的字符(字母、数字及下划线); 
               \~w       匹配成词字符外的任意字符; 
               \x        匹配任意十六进制数字(0-9,a-f, A-F); 
               \~x       匹配除十六进制数字外的任意字符;            全角部分: 
               \f        匹配任意双字节字符(汉字或全角符号); 
               \~f       匹配任意单字节字符; 
               \A        匹配任意全角ASCII字符; 
               \b        匹配任意收录在BIG5码集中的双字节字符; 
               \~b       匹配未收录在BIG5码集中的双字节字符; 
               \c        匹配任意汉字(不包括符号); 
               \~c       匹配非汉字的双字节字符; 
               \D        匹配地支字符(子丑寅卯……); 
               \g        匹配收录在GB码集中的双字节字符; 
               \~g       匹配非收录在GB码集中的双字节字符; 
               \G        匹配大写希腊字母 
               \j        匹配日文片假名 
               \J        匹配日文平假名 
               \k        匹配小写希腊字母 
               \K        匹配日文平假名; 
               \m        匹配数学符号; 
               \n        匹配中文数字(一二三四……); 
               \N        匹配大写中文数字(壹贰叁肆……); 
               \P        匹配全角标点符号; 
               \r        匹配小写俄文字母; 
               \R        匹配大写俄文字母; 
               \s        匹配数学符号; 
               \S        匹配中文序号(⒈⒉⒊⒋……); 
               \T        匹配天干字符(甲乙丙丁……); 
               \V        匹配竖排标点符号; 
               \y        匹配拼音字符; 
               \Y        匹配注音字符; 
               \Z        匹配制表字符; 
      

  4.   

    如果想用Groups[num],可以那样用标准正则不支持那么多转义字符,.net中也一样,而且根本没那个必要,太多了反而显得乱参考MSDN
    ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxfund/html/0f8bffab-ee0d-4e0e-9a96-2b4a252bb7e4.htm
      

  5.   

    发现有错误
    Math.E和Math.PI会发生错误,麻烦改进一下
      

  6.   

    上面只是处理了符合楼主所给的例子的Math类的方法,当然无法处理Math类的字段,如果连属性,字段一起都要处理的话,那楼主就要考虑一下,从字符串的来源上着手了,为什么会有这种形式的源字符串出现可以处理,但是要把整个Math类的方法,属性,字段等分类处理,那就麻烦多了
      

  7.   

    请问怎么对替换作选择呢?(相当于if)           ([a-z])([a-z]*)\(   表示属性,一连串的英文后不是左括号
    (math\.)
               ([a-z]+)([^a-z\(])  表示方法,一连串的英文后是左括号