簡體   English   中英

正則表達式在C#中采用字符串的2部分

[英]Regular expression to take 2 parts of a string in c#

dir1 \\ dir2 \\ dir3 \\ file.aspx.cs (343,49):錯誤CS0839:缺少參數[ C:\\ dir \\ dir \\ dir \\ dir \\ namespace.namespace.namespace.namespace \\ project.csproj]

我已經嘗試了幾個小時來創建一個正則表達式,以僅提取該字符串的2個區域。 粗體區域是我希望捕獲的部分。

我需要將此字符串分成兩個單獨的字符串:

  1. 我想要第一個“(”之前的所有內容
  2. “ [”和“]”之間的所有內容,但不包括“ project.csproj”

對於#1,我得到的最接近的是(^.*\\() ,它基本上會捕獲到第一個“(”為止的所有內容( 包括不需要的括號

對於#2,我得到的最接近的是(\\[.*\\]) ,它將基本上捕獲括號內的所有內容( 包括我不需要的括號 )。

上面字符串中的任何單詞都可能會與“ .csproj”,“ C:\\”和“ .cs”分開

上下文:這是MSBuild在編譯時吐出錯誤的方式。 通過捕獲這兩部分,我可以將它們連接起來以提供指向錯誤文件的確切鏈接,並在Visual Studio中自動打開該文件:

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

此模式:

(^[^(]*).*\[(.*)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可以是任何文件名(即,您只需要最后一個反斜杠前的所有內容,請使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM