如图,求一个正则表达式,VS里面Replace用的,目的是把所有C++代码的"..."替换成_T("..."),要求
1. 遇到已经替换过的情况如_T("...")跳过
2. 遇到已经替换过的情况如_T ( "...")跳过
3. 遇到"...\"..."可以处理如果能给出除正则外更好的办法那就最好了,谢谢。
1. 遇到已经替换过的情况如_T("...")跳过
2. 遇到已经替换过的情况如_T ( "...")跳过
3. 遇到"...\"..."可以处理如果能给出除正则外更好的办法那就最好了,谢谢。
Fotmat("aa","bb")
你无法区分"aa"或是","哪个是正确的。
string text = File.ReadAllText(@"c:\test.cpp");
string result = Regex.Replace(text, "这里怎么写", "这里怎么写");
File.WriteAllText(@"c:\test.cpp", text);
逍遥这么晚还在啊,呵呵。告诉我一下代码怎么写好吗,我Regex完全不会:(
{
string text = File.ReadAllText(@"c:\test.cpp");
string result = Regex.Replace(text, @"(?m)(?<=^([^""]|""[^""]*"")*)(?<!L|_T|TEXT\()""[^""]*""", "_T($&)");
File.WriteAllText(@"c:\test.cpp", result);
}
更新为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);
}
有点小问题诶,
源文件里面:mailto = _T("mailto:") + email;被替换成mailto = _T(_T("mailto:")) + email;
还有:include也被替换了#include _T("Pathlib.h")我把你的代码L|_T|TEXT改成L|_T|TEXT|include,还是会被替换L"..."工作正常。
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不加括号。
搞定,结贴!