尝试将所有匹配项设为guid = guid。我期待收到匹配的集合,其中一个匹配似乎:
{9659BAE5-632F-4195-BD5D-414C1F2C1066} = {6E298F2A-129A-4491-B053-F12D67561572}
我正在尝试特别匹配GlobalSection(NestedProjects) = preSolution
和EndGlobalSection
之间的所有guid = guid。文件中还有其他位置存在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|.)+?)
我是否误用了背后的东西?
答案 0 :(得分: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}}
您可能需要在正则表达式中使用RegexOptions.Multiline作为选项,因为它是C#(如果您还没有)。
修改强>
我用你的数据片段写了一个小测试程序。我把它加倍,以确保它在GlobalSection(NestedProjects) = preSolution
之后不匹配第一组
matches
仅在GlobalSection(NestedProjects) = preSolution
和EndGlobalSection
之间为两个部分返回了GUID。
行{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);
}
}