2

問題:

guid = guid であるすべての一致を取得しようとしています。1 つの一致が次のような一致のコレクションを受け取ることを期待しています。

{9659BAE5-632F-4195-BD5D-414C1F2C1066} = {6E298F2A-129A-4491-B053-F12D67561572}

GlobalSection(NestedProjects) = preSolutionとの間のすべての guid = guid を一致させようとしていEndGlobalSectionます。ファイルには guid = guid が存在する場所が他にもあります。

以下はデータ スニペットです。

    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client", "Applications\", "{297BE1A3-A6A3-4835-BB87-63B4B4E2AE0D}"
        ProjectSection(ProjectDependencies) = postProject
            {A459406A-94FF-4CA9-8183-C7472419CC7D} = {A459406A-94FF-4CA9-8183-C7472419CC7D}
        EndProjectSection
    EndProject

    GlobalSection(NestedProjects) = preSolution
        {3D84A2B1-536D-4953-B331-D86E421905E7} = {AF46FD2E-710D-49CD-A203-CB0F8B7EF415}
        {02CB05EC-6902-417E-AD50-B3910B245B22} = {2F54A6F1-5D32-4673-8AEE-B845CC622D64}
        {DE303EF0-E3B1-4BA9-8CB3-544D37D29576} = {2F54A6F1-5D32-4673-8AEE-B845CC622D64}
        {5A095236-0EE1-4480-B7A6-833ECCFE4257} = {AF070137-227F-42F7-9487-00CB26C46E04}
        {6CCA189C-0D45-4E80-8486-38AB3E625E69} = {AF070137-227F-42F7-9487-00CB26C46E04}
        {EAE3152A-C003-4E39-BFB7-B4F7CACE1606} = {AF070137-227F-42F7-9487-00CB26C46E04}
        {9659BAE5-632F-4195-BD5D-414C1F2C1066} = {6E298F2A-129A-4491-B053-F12D67561572}
    EndGlobalSection
EndGlobal

私が試したこと:

guid = guid と一致させるために使用しているものは次のとおりです

{[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}} = {[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}}

これは、明らかに、試合の場所を差別しないことを除けば、うまく機能します。したがって、ファイルの他の部分から他の一致を受け取ります。私は(多くのバリエーションで)のように前向きな後ろ姿を使おうとしています:

(?<=GlobalSection\(NestedProjects\) = preSolution(\r\n|.)+?)

後読みまたは何か他のものを誤用していますか?

4

1 に答える 1

1

次の正規表現を試したところ、あなたの例を使用して正しい結果が得られました。

(?<= GlobalSection\(NestedProjects\) = preSolution(\r\n|.)+?){[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}} = {[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}}

C# であるため、正規表現のオプションとして RegexOptions.Multiline を使用する必要がある場合があります (まだ使用していない場合)。

編集

データ スニペットを使用して小さなテスト プログラムを作成しました。両方のセクション間および両方のセクションGlobalSection(NestedProjects) = preSolution
matchesの GUID のみを返した後、最初のグループと一致しないことを確認するために、それを 2 倍にしました。GlobalSection(NestedProjects) = preSolutionEndGlobalSection

私が期待したように、行{A459406A-94FF-4CA9-8183-C7472419CC7D} = {A459406A-94FF-4CA9-8183-C7472419CC7D}は一致した結果にありませんでした。このコードの何かがお役に立てば幸いです。

    static void Main(string[] args)
    {
        string input = System.IO.File.ReadAllText(@"c:\test\directory\test.txt");

        string pattern =
            @"(?<=GlobalSection\(NestedProjects\) = preSolution(\r\n|.)+?){[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}} = {[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}}";
        Regex re = new Regex(pattern, RegexOptions.Multiline);


        MatchCollection matches = re.Matches(input);

        foreach (var match in matches)
        {
            Console.Write(match);
        }

    }
于 2012-10-04T21:26:29.730 に答える