正则表达式,用于在c#中获取字符串的两个部分
本文关键字:两个 字符串 用于 获取 正则表达式 | 更新日期: 2023-09-27 18:20:21
dir1''dir2''dir3''file.aspx。cs(343,49):错误CS0839:参数丢失[C:''dir''dir''namespace.namespace.namespace''project.csproj]
几个小时以来,我一直在尝试创建一个正则表达式来提取这个字符串的两个区域。粗体部分是我想要捕捉的部分。
我需要把这个字符串分成两个单独的字符串:
- 我想要第一个"("之前的所有东西
- "["answers"]"之间的所有内容,但不包括"project.csproj"
对于#1,我得到的最接近的是(^.*'()
,它基本上会捕获第一个"("(包括括号,但我不想要)之前的所有内容
对于#2,我得到的最接近的是('[.*'])
,它基本上会捕获括号内的所有内容(包括我不想要的括号)。
除了".csproj"C:''"answers".cs"之外,上述字符串中的任何单词都可能发生变化
上下文:这就是MSBuild在编译时抛出错误的方式。通过捕获这两个部分,我可以将它们连接起来,以提供到错误文件的精确链接,并在Visual Studio中自动打开该文件:
System.Diagnostics.Process.Start("devenv.exe","/edit path");
此模式:
(^[^(]*).*'[(.*)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
可以是任何文件名(即,您只需要最后一个反斜杠之前的所有内容,请使用:
'[(.*?)[^'']*']