提取两个双引号之间的所有数据

时间:2016-03-24 12:12:04

标签: regex powershell

我正在尝试使用powershell正则表达式从AssemblyInfo.cs文件中提取版本数据。下面的正则表达式是我最好的尝试,但它只拉取字符串[assembly: AssemblyVersion("。我已经把这个正则表达式放到了几个web正则表达式测试器中,看起来就像它正在做我想要的,但这是我第一次尝试使用powershell正则表达式,所以我可能看错了。

$s = '[assembly: AssemblyVersion("1.0.0.0")]'
$prog = [regex]::match($s, '([^"]+)"').Groups[1].Value

4 个答案:

答案 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 timeCan 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等。