正则表达式,用于在c#中获取字符串的两个部分

本文关键字:两个 字符串 用于 获取 正则表达式 | 更新日期: 2023-09-27 18:20:21

dir1''dir2''dir3''file.aspx。cs(343,49):错误CS0839:参数丢失[C:''dir''dir''namespace.namespace.namespace''project.csproj]

几个小时以来,我一直在尝试创建一个正则表达式来提取这个字符串的两个区域。粗体部分是我想要捕捉的部分。

我需要把这个字符串分成两个单独的字符串:

  1. 我想要第一个"("之前的所有东西
  2. "["answers"]"之间的所有内容,但不包括"project.csproj"

对于#1,我得到的最接近的是(^.*'(),它基本上会捕获第一个"("(包括括号,但我不想要)之前的所有内容

对于#2,我得到的最接近的是('[.*']),它基本上会捕获括号内的所有内容(包括我不想要的括号)。

除了".csproj"C:''"answers".cs"之外,上述字符串中的任何单词都可能发生变化

上下文:这就是MSBuild在编译时抛出错误的方式。通过捕获这两个部分,我可以将它们连接起来,以提供到错误文件的精确链接,并在Visual Studio中自动打开该文件:

System.Diagnostics.Process.Start("devenv.exe","/edit path");

正则表达式,用于在c#中获取字符串的两个部分

此模式:

(^[^(]*).*'[(.*)project.csproj]$

捕获这些组:

  1. dir1'dir2'dir3'file.aspx.cs
  2. C:'dir'dir'dir'dir'namespace.namespace.namespace.namespace'

如果名称project.csproj文件可能更改,则可以使用以下模式:

(^[^(]*).*'[(.*'')[^'']*]$

这将匹配括号内最后一个路径片段之前的所有内容。

好吧,现在括号对你没有任何好处。只需将它们放在您感兴趣的零件周围即可:

^(.*)'(

'[(.*)']

现在要将projects.csproj从匹配中排除,只需将其包含在.*:之后即可

'[(.*)projects.csproj']

然后match.Groups(1)将在每种情况下为您提供所需的字符串(其中match是您的Match对象)。

如果projects.csproj可以是任何文件名(即,您只需要最后一个反斜杠之前的所有内容,请使用:

'[(.*?)[^'']*']