正则表达式不适合模式

时间:2019-07-30 14:35:50

标签: c# regex

我要浏览头文件列表,然后保存其中包含的文件。我的问题是模式不匹配。

在此链接中,您可以找到我认为可以使用的模式:https://regex101.com/r/jbJLxT/3

string rgxPat = "\\#include\\s+\"(?:\\w+\\/)*(\\w +\\.(?:hed|he|hdb|h))\"";
Regex incLRgx = new Regex(rgxPat, RegexOptions.IgnoreCase);
for (int i = alrdyChckd; i < missFiles.Count; i++)
{
    tmpStr = baseSBFolder + "\\" + missFiles[i].getPath() + "\\" + missFiles[i].getName();
    System.IO.StreamReader actFile = new System.IO.StreamReader(tmpStr);
    while((actLine = actFile.ReadLine()) != null)
    {
        Match match = incLRgx.Match(actLine);
        if(match.Success)
        {
    missFiles.Add(baseSB.getFileByName(match.Groups[1].Value.ToString()));
        }
    }
    alrdyChckd++;
}

我检查了调试变量,并且匹配模式始终返回错误的返回值,而模式和实际行似乎相同。 这也是一个问题,我无法使用字符串= @“ [pettern]”形式添加双qoutes,因为双任务将关闭模式。

2 个答案:

答案 0 :(得分:2)

这将为您提供路径:

/^\#include\s+"(.+)"$/gm

$1的输出:

FSW/CustSW/CustSW_generic/RSC/Src/gen/rsc_cpif.h
EbsPartition/EbsCluster/EbsCluster_generic/EbsCore/Src/ebscore_basetypes.h
FSW/CustSW/CustSW_generic/RSC/Src/gen/rsc_types.h

如果只需要文件名,请使用:

/^\#include\s+".*\/([^\/]+)"$/gm

$1将为您提供:

rsc_cpif.h
ebscore_basetypes.h
rsc_types.h

答案 1 :(得分:0)

您可以按名称捕获组以获取文件路径:

\#include(?<path>\s+"(?:\w+\/)*(\w+\.(?:hed|he|hdb|h))")

match.Groups["path"].Value.ToString()

这将为您提供捕获为"FSW/CustSW/CustSW_generic/RSC/Src/gen/rsc_cpif.h"的文件路径