C# 正则表达式在c中表示字符串的两部分#
dir1\dir2\dir3\file.aspx.cs(343,49):错误CS0839:缺少参数[C:\dir\dir\dir\namespace.namespace.namespace\project.csproj] 我已经尝试了几个小时来创建一个正则表达式来提取这个字符串的两个区域。粗体区域是我希望捕捉的部分 我需要将此字符串拆分为两个单独的字符串:C# 正则表达式在c中表示字符串的两部分#,c#,regex,C#,Regex,dir1\dir2\dir3\file.aspx.cs(343,49):错误CS0839:缺少参数[C:\dir\dir\dir\namespace.namespace.namespace\project.csproj] 我已经尝试了几个小时来创建一个正则表达式来提取这个字符串的两个区域。粗体区域是我希望捕捉的部分 我需要将此字符串拆分为两个单独的字符串: 我想在第一次见面之前把一切都准备好 “[”和“]”之间的所有内容,但不包括“project.csproj” 对于#1,我得到的最接近的是(^
(^.*\()
,它将基本上捕获到第一个“((包括我不想要的括号)
对于#2,我得到的最接近的是(\[.*\])
,它将基本上捕获括号内的所有内容(包括我不想要的括号)
上述字符串中的任何单词都可能在“.csproj”、“C:\”和“.cs”之外发生变化。
上下文:这是MSBuild在编译时抛出错误的方式。通过捕获这两个部分,我可以将它们连接起来,以提供指向出错文件的精确链接,并在Visual Studio中自动打开该文件:
这种模式:
(^[^(]*).*\[(.*)project.csproj]$
捕获以下组:
dir1\dir2\dir3\file.aspx.cs
C:\dir\dir\dir\dir\namespace.namespace.namespace.namespace\
project.csproj
文件可能会更改,则可以改用此模式:
(^[^(]*).*\[(.*\\)[^\\]*]$
这将匹配括号内最后一个路径片段的所有内容。此模式:
(^[^(]*).*\[(.*)project.csproj]$
捕获以下组:
dir1\dir2\dir3\file.aspx.cs
C:\dir\dir\dir\dir\namespace.namespace.namespace.namespace\
project.csproj
文件可能会更改,则可以改用此模式:
(^[^(]*).*\[(.*\\)[^\\]*]$
这将匹配括号中最后一个路径片段的所有内容。现在括号对您没有任何好处。只需将它们放在您感兴趣的部分周围:
^(.*)\(
及
现在要从匹配中排除projects.csproj
,只需在*
后面包含它:
\[(.*)projects.csproj\]
然后match.Groups(1)
将在每种情况下为您提供所需的字符串(其中match
是您的match
对象)
如果projects.csproj
可以是任何文件名(即,在最后一个反斜杠之前,您只需要所有内容,请使用:
\[(.*?)[^\\]*\]
好吧,现在括号对你没有任何好处。只要把它们放在你感兴趣的部分周围:
^(.*)\(
及
现在要从匹配中排除projects.csproj
,只需在*
后面包含它:
\[(.*)projects.csproj\]
然后match.Groups(1)
将在每种情况下为您提供所需的字符串(其中match
是您的match
对象)
如果projects.csproj
可以是任何文件名(即,在最后一个反斜杠之前,您只需要所有内容,请使用:
\[(.*?)[^\\]*\]
对于第二部分,“project”可能会更改。我如何将其合并到您的正则表达式中?谢谢,它看起来很有效。我正要在我的应用程序中对其进行测试。所有工作正常,我刚刚删除了“^”和$,因为前面/后面可能有文本。对于第二部分,“project”可能会更改。我如何将其合并到您的正则表达式中?谢谢,it loo我正准备在我的应用程序中测试它。一切正常,我只是删除了“^”和$,因为可以有前面/后面的文本。@vidit为什么回滚?这种编辑实际上使问题更具可读性,依我看。@p.s.w.g-因为这样它就失去了Jack在讨论中提到的粗体区域。@vidit为什么回滚?这是错误的事实上,这让这个问题更具可读性,IMO.@p.s.w.g-因为这样一来,它就放松了杰克在讨论中提到的粗体部分。