如图,求一个正则表达式,VS里面Replace用的,目的是把所有C++代码的"..."替换成_T("..."),要求
1. 遇到已经替换过的情况如_T("...")跳过
2. 遇到已经替换过的情况如_T ( "...")跳过
3. 遇到"...\"..."可以处理如果能给出除正则外更好的办法那就最好了,谢谢。

解决方案 »

  1.   

    即行代码,写个控制台小程序实现。vs.net的正则功能太弱。而且你无法简单的通过""判断是在一个字符串中了。
    Fotmat("aa","bb")
    你无法区分"aa"或是","哪个是正确的。
      

  2.   

    另外,最好也告诉我如果用C#代码怎么做,谢谢。
    string text = File.ReadAllText(@"c:\test.cpp");
    string result = Regex.Replace(text, "这里怎么写", "这里怎么写");
    File.WriteAllText(@"c:\test.cpp", text);
      

  3.   


    逍遥这么晚还在啊,呵呵。告诉我一下代码怎么写好吗,我Regex完全不会:(
      

  4.   

    这个么,没仔细测试,c++的各种情况蛮多的。你试试这个先public static void TestRegex01()
    {
        string text = File.ReadAllText(@"c:\test.cpp");
        string result = Regex.Replace(text, @"(?m)(?<=^([^""]|""[^""]*"")*)(?<!L|_T|TEXT\()""[^""]*""", "_T($&)");
        File.WriteAllText(@"c:\test.cpp", result);
    }
      

  5.   

    更新一下,刚没考虑转义字符,可能会有\"的情况,这个不能和前面的"配对。
    更新为public static void TestRegex01()
    {
        string text = File.ReadAllText(@"c:\test.cpp");
        string result = Regex.Replace(text, @"(?m)(?<=^([^""]|""(\\.|[^""\\])*"")*)(?<!L|_T|TEXT\()""(\\.|[^""\\])*""", "_T($&)");
        File.WriteAllText(@"c:\test.cpp", result);
    }
      

  6.   

    如果是如同 abcd"abd"cdfk,则  =\"([^\"]*)\"=, 等号中间的是正则表达式,="([^\"]*)=为=\1=
      

  7.   

    Thanks.试试先,没问题的话明早结贴,呵呵。
      

  8.   

    本帖最后由 lxcnn 于 2010-09-23 23:24:35 编辑
      

  9.   


    有点小问题诶,
    源文件里面:mailto = _T("mailto:") + email;被替换成mailto = _T(_T("mailto:")) + email;
    还有:include也被替换了#include _T("Pathlib.h")我把你的代码L|_T|TEXT改成L|_T|TEXT|include,还是会被替换L"..."工作正常。
      

  10.   

    try
    public static void TestRegex01()
    {
        string text = File.ReadAllText(@"c:\test.cpp");
        string result = Regex.Replace(text, @"(?m)(?<=^([^""]|""(\\.|[^""\\])*"")*)(?<!L|include\s*|(_T|TEXT)\()""(\\.|[^""\\])*""", "_T($&)");
        File.WriteAllText(@"c:\test.cpp", result);
    }
    记错了,好久没用c++了。_T要加括号的,L不加括号。
      

  11.   

    经过提示加测试,最后修改代码如下:@"(?m)(?<=^([^""]|""(\\.|[^""\\])*"")*)(?<!L|include\s*|lib\s*,\s*|(_T|TEXT|_TEXT|__T)\s*\(\s*)""(\\.|[^""\\])*"""
    搞定,结贴!