我使用fnr.exe的批处理脚本对多个文件执行批量搜索和替换操作,但是我在查找如何在fnr.exe中使用捕获组时遇到问题。我可以在一个名为FAR的类似实用程序中使用它们,它使用java正则表达式,但FAR不能从命令行运行,因此我无法自动执行它。 Fnr.exe在其文档中说它使用.NET正则表达式,并且.NET正则表达式的文档在如何捕获组时很有用,但是当涉及到输出捕获的组时,它和& #39; s相当缺乏并假设我正在编写C#或VB代码,我可以称之为:
Console.WriteLine("Match: {0}", match.Value)
我有一堆像下面这样的字符串,左边是原始字符串,右边是我想要的替换字符串:
include "fooPrintDriver.h"; | include "barPrintDriver.h";
include "fooSearchAgent.h"; | include "barSearchAgent.h";
include "fooEventListener.h"; | include "barEventListener.h";
在FAR中,我可以找到左侧的字符串
foo(.*?)\.h"
然后使用
将其替换为我想要的字符串bar\1.h"
' \ 1'将是PrintDriver或SearchAgent或EventListener,但是当我在fnr.exe中尝试相同的事情时,' \ 1'字面意思是' \ 1',所以我的输入和输出将是:
include "fooPrintDriver.h"; | include "bar\1.h";
include "fooSearchAgent.h"; | include "bar\1.h";
include "fooEventListener.h"; | include "bar\1.h";
任何人都知道如何让它在fnr.exe中运行?
答案 0 :(得分:2)
我明白了。我需要使用以下内容:
bar$1.h"
答案 1 :(得分:0)
很高兴看到你弄明白了。但是,尝试过它并且最初失败了,将它与括号分组很重要。例如,如果您使用\ w来查找foo之后的字母(比您使用的方法更可靠),使用$ 1将替换为文字$ 1的字母。你需要使用(\ w)。然后$ 1会正确替换。