簡體   English   中英

提取兩個雙引號之間的所有數據

[英]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
                            ^

試試這個正則表達式"([^"]+)"

Regex101 演示

正則表達式可能難以閱讀,因此最佳做法是使它們盡可能簡單,同時仍能解決您可能看到的所有可能情況。 您正在嘗試檢索整個字符串中唯一的數字序列,因此我們應該尋找它並繞過使用組。

$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.

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