[英]Extract all data in between two double quotes
我正在嘗試使用 powershell 正則表達式從 AssemblyInfo.cs 文件中提取版本數據。 下面的正則表達式是我最好的嘗試,但它只提取字符串[assembly: AssemblyVersion("
。我已經將這個正則表達式放入幾個網絡正則表達式測試器中,看起來它正在做我想做的事,但這是我的第一次破解使用 powershell regex,所以我可能看錯了。
$s = '[assembly: AssemblyVersion("1.0.0.0")]'
$prog = [regex]::match($s, '([^"]+)"').Groups[1].Value
您還需要包含起始雙引號,否則它會從頭開始捕獲,直到到達第一個"
為止。
$prog = [regex]::match($s, '"([^"]+)"').Groups[1].Value
^
試試這個正則表達式"([^"]+)"
正則表達式可能難以閱讀,因此最佳做法是使它們盡可能簡單,同時仍能解決您可能看到的所有可能情況。 您正在嘗試檢索整個字符串中唯一的數字序列,因此我們應該尋找它並繞過使用組。
$s = '[assembly: AssemblyVersion("1.0.0.0")]'
$prog = [regex]::match($s, '[\d\.]+').Value
$prog
1.0.0.0
對於雙引號之間數據的通用解決方案,其他答案都很棒。 但是,如果我為版本字符串解析 AssemblyInfo.cs,我會更明確。
$versionString = [regex]::match($s, 'AssemblyVersion.*([0-9].[0-9].[0-9].[0-9])').Groups[1].Value
$version = [version]$versionString
$versionString
1.0.0.0
$版本
Major Minor Build Revision
----- ----- ----- --------
1 0 0 0
更新/編輯:
與解析版本相關(同樣,如果這不是關於在雙引號之間解析文本的通用問題)是我的文件中實際上不會有Mmbr
格式的版本,因為我一直發現 Major.minor 就足夠了, 並且通過使用像1.2.*
這樣的格式,可以毫不費力地為您提供一些額外的信息。
請參閱編譯日期和時間以及是否可以在我的 C# 代碼中生成編譯日期以確定演示版本的到期日? .
當對匯編版本的第三和第四部分使用 * 時,這兩個部分會在編譯時自動設置為以下值:
第三部分是自 2000-01-01 以來的天數
第四部分是從午夜開始的秒數除以 2(雖然一些 MSDN 頁面說它是一個隨機數)
我想在更大的版本圖中需要考慮一些事情,需要 1.2.*,允許 1.2 或 1.2.3,或者只接受 1.2.3.4 等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.