FI包含许多代码,其中包含以下代码段:
#if wxCHECK_VERSION(2, 9, 0)
Codef( _T("%AAppend(%t)"), ArrayChoices[i].wx_str());
#else
Codef( _T("%AAppend(%t)"), ArrayChoices[i].c_str());
#endif
但我想清理代码
Codef( _T("%AAppend(%t)"), ArrayChoices[i].wx_str());
我的意思是,我需要剥离预处理器指令,只留下第一个分支 .
匹配条件应为:
#if wxCHECK_VERSION(2, 9, 0)
blablabla1
#else
blablabla2
#endif
除了 wx_str
和 c_str
之外, blablabla1
和 blablabla2
的内容应该相同 .
看到这里,有人说它可以由正则表达式处理,但我不知道,你能帮助我吗?谢谢 .
编辑:我只是想剥离#else分支,只保留第一个分支内容 .
这是参考页面:
Re: what's the best and quick way to remove all the wx_str and c_str preprocessor
2 回答
搜索
This regex适用于您的示例:
更换
Regexr.com :替换为:
$1wx_str$2
. 别忘了选择 dotall 选项 .Notepad++ :替换为:
\1wx_str\2
. 别忘了选择 . matches newline 选项 .批处理模式
记事本允许以批处理模式查找/替换 .
按Ctrl Shift H打开“ Find in Files ”对话框
将正则表达式复制粘贴到“ Find what ”框 .
将替换(
\1wx_str\2
)上方的复制粘贴到“ Replace with ”框中 .指定 Directory 以在其中查找/替换 .
在搜索模式组框中选择 Regular Expression .
检查
. matches newline
框 .点击“ Find All ”按钮查看匹配项 .
当您确定要更换所有内容时,单击“ Replace in Files ”按钮 .
许多简单的正则表达式工具不支持多行匹配 . 您可以创建一个简单的
awk
或sed
脚本,或使用Perl将整个文件粉碎成一个长字符串;这并不试图考虑空白的变化,也不会处理嵌套的预处理程序指令 . 如果您的匹配始终是一行,则可以简化 .