[英]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,我得到的最接近的是(\\[.*\\])
,它將基本上捕獲括號內的所有內容( 包括我不需要的括號 )。
上面字符串中的任何單詞都可能會與“ .csproj”,“ C:\\”和“ .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
可以是任何文件名(即,您只需要最后一個反斜杠前的所有內容,請使用:
\[(.*?)[^\\]*\]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.