【问题标题】:Extract all data in between two double quotes提取两个双引号之间的所有数据
【发布时间】:2016-03-24 12:12:04
【问题描述】:

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

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

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

    您还需要包含起始双引号,否则它将从头开始捕获,直到到达第一个 "

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

    【讨论】:

      【解决方案2】:

      试试这个正则表达式"([^"]+)"

      Regex101 Demo

      【讨论】:

      • 如果您只想要版本号,也可以使用(\d+\.?)+ Demo here
      【解决方案3】:

      正则表达式可能难以阅读,因此最佳做法是使其尽可能简单,同时仍能解决您可能遇到的所有可能情况。您正在尝试检索整个字符串中唯一的数字序列,因此我们应该寻找它并使用组绕过。

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

      $prog

      1.0.0.0
      

      【讨论】:

        【解决方案4】:

        对于双引号之间数据的通用解决方案,其他答案都很棒。但是,如果我为版本字符串解析 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,等等。

        【讨论】:

        • 我建议用/d 数字通配符替换[0-9]。如果任何组件(主要、次要、构建、修订)达到如下两位数,您还需要使用+5.12.1.11
        • @doron,很好的反馈,谢谢。我已经更新了我的答案以反映我在实践中所做的事情,而不是尝试解析每个数字组合,这让我现在想到扫描其他/较旧的项目以查找“不需要的”版本字符串以使用我的首选方法。再次感谢发人深省的评论。
        猜你喜欢
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 2016-01-19
        • 1970-01-01
        相关资源
        最近更新 更多