fnr.exe正则表达式捕获组输出

时间:2015-08-05 12:16:10

标签: regex

我使用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中运行?

2 个答案:

答案 0 :(得分:2)

我明白了。我需要使用以下内容:

bar$1.h"

答案 1 :(得分:0)

很高兴看到你弄明白了。但是,尝试过它并且最初失败了,将它与括号分组很重要。例如,如果您使用\ w来查找foo之后的字母(比您使用的方法更可靠),使用$ 1将替换为文字$ 1的字母。你需要使用(\ w)。然后$ 1会正确替换。