我正在尝试使用powershell正则表达式从AssemblyInfo.cs文件中提取版本数据。下面的正则表达式是我最好的尝试,但它只拉取字符串[assembly: AssemblyVersion("
。我已经把这个正则表达式放到了几个web正则表达式测试器中,看起来就像它正在做我想要的,但这是我第一次尝试使用powershell正则表达式,所以我可能看错了。
$s = '[assembly: AssemblyVersion("1.0.0.0")]'
$prog = [regex]::match($s, '([^"]+)"').Groups[1].Value
答案 0 :(得分:4)
您还需要包含起始双引号,否则它将从开始捕获,直到达到第一个"
。
$prog = [regex]::match($s, '"([^"]+)"').Groups[1].Value
^
答案 1 :(得分:4)
试试这个正则表达式"([^"]+)"
<强> Regex101 Demo 强>
答案 2 :(得分:1)
正则表达式可能难以阅读,因此最佳做法是使它们尽可能简单,同时仍然可以解决您可能看到的所有可能情况。您正在尝试检索整个字符串中唯一的数字序列,因此我们应该查找并绕过使用组。
$s = '[assembly: AssemblyVersion("1.0.0.0")]'
$prog = [regex]::match($s, '[\d\.]+').Value
$ PROG
1.0.0.0
答案 3 :(得分: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
<强>更新/编辑:强>
与解析版本相关(同样,如果这不是关于在双引号之间解析文本的一般性问题),我实际上在我的文件中实际上没有M.m.b.r
格式的版本,因为我总是发现Major.minor就足够了,使用像1.2.*
这样的格式可以毫不费力地为你提供一些额外的信息。
请参阅Compile date and time和Can I generate the compile date in my C# code to determine the expiry for a demo version?。
在汇编版本的第三和第四部分使用*时,这两个部分在编译时自动设置为以下值:
第三部分是自2000-01-01以来的天数
第四部分是从午夜开始的秒数除以2(虽然有些MSDN页面说它是随机数)
需要考虑的事情我想在更大的版本图片中,要求1.2。*,允许1.2或1.2.3,或仅接受1.2.3.4等。