C# 使用一个正则表达式匹配多个值?

C# 使用一个正则表达式匹配多个值?,c#,regex,C#,Regex,我有这个正则表达式来匹配这个给定的数据。它必须匹配每个引用名称(include),并且如果在其中给定了它,它还应该匹配其他值。 源数据.. <Reference Include="Interop.ERMSPlugin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b5fdd3f42e76a9c0, processorArchitecture=MSIL"> <HintPath>C:\Program File

我有这个正则表达式来匹配这个给定的数据。它必须匹配每个引用名称(include),并且如果在其中给定了它,它还应该匹配其他值。 源数据..

<Reference Include="Interop.ERMSPlugin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b5fdd3f42e76a9c0, processorArchitecture=MSIL">        <HintPath>C:\Program Files (x86)\Epiplex500\epiplex\Bin\SharedInterop.ERMSPlugin.dll</HintPath>
      <Private>False</Private>
</Reference>
<Reference Include="LicenseProcessing">
 <HintPath>C:\Program Files (x86)\Epiplex500\epiplex\Bin\Shared\LicenseProcessing.dll</HintPath>
</Reference>
<Reference Include="Snapshot">
      <HintPath>C:\Program Files (x86)\Epiplex500\epiplex\Bin\Shared\Snapshot.dll</HintPath>
</Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
C:\ProgramFiles(x86)\epilex500\epilex\Bin\SharedInterop.ERMSPlugin.dll
假的
C:\Program Files(x86)\epilex500\epilex\Bin\Shared\LicenseProcessing.dll
C:\ProgramFiles(x86)\epilex500\epilex\Bin\Shared\Snapshot.dll
我正在使用这个正则表达式

<Reference Include="(?:([^,|"]+?)[,|"]|[\s\S]*?Version=([^,]+?),[\s\S]*?PublicKeyToken=([^,|"]+)\S([^">]+?)[\s\S]*?<HintPath>([\s\S]*?)<\/HintPath>[\s\S]*?)

这是一个基于Microsoft.Build的解决方案,它仍然使用正则表达式:

通过右键单击[解决方案]>添加引用…,选择程序集框架
Microsoft.Build
,然后点击确定来添加引用

下面是代码本身(编辑:现在,它应该处理所有引用节点):

var project=new Microsoft.Build.Evaluation.project(@“FILE_PATH.csproj”);
var references=project.Items.Where(p=>p.ItemType==“Reference”)。选择(p=>p);
foreach(引用中的var引用)
{
var ReferenceName=Regex.Match(reference.EvaluatedInclude,@“^[\w\.]+(?=,\p{Zs}|$)”,RegexOptions.CultureInvariant)。值;

var version=Regex.Match(reference.EvaluatedInclude,@“(?s:(?。说真的,regex绝对是执行此任务的错误工具。为什么不直接解析xml?。这是一些msbuild脚本,对吗?添加对Microsoft.Build的引用,并使用该类解析.csproj文件。就是这么简单。是的,它的csproj文件。可以工作,但它只提供引用名称。我需要所有信息。我必须使用re为了简化,我将
project.Items.Where(p=>p.ItemType==“Reference”).Select(p=>p)
改为
project.GetItems(“Reference”)
^[\w\.]+(?=,\p{Zs}|$)
改为
^[^,]+
但除此之外,这看起来不错。很抱歉。当我超过15岁时,我一定会打分。@Harry007实际上你还不能投票,但你可以接受它。请参阅。
var project = new Microsoft.Build.Evaluation.Project(@"FILE_PATH.csproj");
var references = project.Items.Where(p => p.ItemType == "Reference").Select(p => p);
foreach (var reference in references)
{
      var ReferenceName = Regex.Match(reference.EvaluatedInclude, @"^[\w\.]+(?=,\p{Zs}|$)", RegexOptions.CultureInvariant).Value;
      var version = Regex.Match(reference.EvaluatedInclude, @"(?s:(?<=Version=)([\d\.]+))", RegexOptions.CultureInvariant).Value;
      var keyToken = Regex.Match(reference.EvaluatedInclude, @"(?s:(?<=PublicKeyToken=)([\w\-]+))", RegexOptions.CultureInvariant).Value;
      var hintpath = reference.GetMetadata("HintPath") != null ? reference.GetMetadata("HintPath").EvaluatedValue : string.Empty;
}
var ReferenceName = Regex.Match(reference.EvaluatedInclude, @"^[^\p{Zs}]+(?=,\p{Zs}|$)", RegexOptions.CultureInvariant).Value;
var version = Regex.Match(reference.EvaluatedInclude, @"(?s:(?<=Version=)([^\p{Zs}]+(?=,\p{Zs}|$)))", RegexOptions.CultureInvariant).Value;
var keyToken = Regex.Match(reference.EvaluatedInclude, @"(?s:(?<=PublicKeyToken=)([^\p{Zs}]+(?=,\p{Zs}|$)))", RegexOptions.CultureInvariant).Value;