正则表达式解析具有可选换行符的多行条目

时间:2013-12-11 12:41:38

标签: c# regex

我几乎是正则表达式的新手。我试图解析CommandLineInterface(CLI)的输出。输出通常是指定路径下的文件和文件夹的内容。以下可能是输出的潜在不同格式。

CLI输出格式1

d:\ARCTest\_MyProject\Sources\CMCore\project.pj subsandbox <CRLF>
<space> d:\ARCTest\_MyProject\Sources\CMInterfaces\project.pj subsandbox <CRLF>
<space> d:\ARCTest\_MyProject\Sources\CMImplementation\project.pj subsandbox <CRLF>
<space> d:\ARCTest\_MyProject\Sources\Übersicht und fragen\project.pj subsandbox <CRLF>
<space> d:\ARCTest\_MyProject\Sources\CMAccess.sln archived 1.15 <CRLF>
<space> d:\ARCTest\_MyProject\Sources\übersicht und fragen.xlsx archived 1.1

对于格式1,在第二行之前有一个CRLF和一个加法空间(我用符号<space><CRLF>表示这个,请注意这不是实际的一部分输出)。 CRLF可能并不总是出现在输出中,换句话说,它是可选的。前四个是mks文件夹的路径,后两个是mks中的文件。我想要的是指向文件夹的所有匹配(以\ project.pj结尾的那些匹配,包括project.pj),并将其指向文件(以文件归档结束,不包括已归档的文本)。

CLI输出格式2

CMCore/project.pj subproject <CRLF>
CMInterfaces/project.pj subproject <CRLF>
CMImplementation/project.pj subproject <CRLF>
Übersicht und fragen/project.pj subproject <CRLF>
CMAccess.sln archived <CRLF>
übersicht und frögen.xlsx archived

对于格式2,在第二行之前有一个CRLF(我用符号表示这个,请注意这不是实际输出的一部分)。前四个是mks文件夹的路径,后两个是mks中的文件。我想要的是指向文件夹的所有匹配(以\ project.pj结尾的那些匹配,包括project.pj),并将其指向文件(以文件归档结束,不包括已归档的文本)。

我几乎成功地使用rgular表达式^([^\r\n]\w+.+?\.pj)在两种情况下解析文件夹,但它无法从输出格式1获取第一行。我无法找出解析文件的解决方案两种格式。任何解决方案都会有很大的帮助。

如果我需要提供更多相关信息,请与我们联系。

提前致谢, 乔。

1 个答案:

答案 0 :(得分:0)

试试这个:

([\w ]\S+\/*)*\w([\w]+\.(\w+))

using System;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        string patternDir = @"([\w ]\S+\/*)*\w([\w]+\.(pj))";

        string pathDir = @"d:\ARCTest\_MyProject\Sources\CMInterfaces\project.pj subsandbox ";
        string pathFile = @"CMAccess.sln archived";

        Console.WriteLine((Regex.IsMatch(pathDir,patternDir))? "It's dir!" : "It's not a dir");
        Console.WriteLine((Regex.IsMatch(pathFile,patternDir))? "It's dir!" : "It's not a dir");

        Console.ReadKey();
    }
}