dir1 \ dir2 \ dir3 \ file.aspx.cs (343,49):错误CS0839:缺少参数[ C:\ dir \ dir \ dir \ dir \ namespace.namespace .namespace.namespace \ project.csproj]
我已经花了好几个小时来创建一个正则表达式来提取这个字符串的2个区域。大胆的区域是我想要捕捉的部分。
我需要将此字符串拆分为两个单独的字符串:
对于#1,我最接近的是(^.*\()
,这将基本上捕获到第一个“(”(包括我不想要的括号)的所有内容< / p>
对于#2,我得到的最接近的是(\[.*\])
,它基本上会捕获括号内的所有内容(包括我不想要的括号)。
上述字符串中的任何字词都可以更改为“.csproj”“C:\”和“.cs”
上下文:这是MSBuild在编译时吐出错误的方式。通过捕获这两个部分,我可以连接它们以提供错误文件的确切链接并自动在Visual Studio中打开文件:
System.Diagnostics.Process.Start("devenv.exe","/edit path");
答案 0 :(得分:5)
这种模式:
(^[^(]*).*\[(.*)project.csproj]$
捕获这些群组:
dir1\dir2\dir3\file.aspx.cs
C:\dir\dir\dir\dir\namespace.namespace.namespace.namespace\
如果名称project.csproj
文件可能更改,则可以改为使用此模式:
(^[^(]*).*\[(.*\\)[^\\]*]$
这将匹配括号内最后一个路径片段的所有内容。
答案 1 :(得分:1)
^(.*)\(
和
\[(.*)\]
现在要从匹配项中排除projects.csproj
,只需将其包含在.*
之后:
\[(.*)projects.csproj\]
然后match.Groups(1)
会在每种情况下为您提供所需的字符串(其中match
是您的Match
对象)。
如果projects.csproj
可以是任何文件名(即您只需要最后一个反斜杠的所有内容,请使用:
\[(.*?)[^\\]*\]