gpt4 book ai didi

ruby - 使用正则表达式获取版本号

转载 作者:数据小太阳 更新时间:2023-10-29 08:27:13 28 4
gpt4 key购买 nike

我有一个像这样的字符串:

"MyProgramm build version 0.0.7.161"

我想从中获取版本。我试过:

String(build_num[/MyProgramm build version (\d*.\d*.\d*.\d*)$/, 1])

我得到:

", 0.0.7.161"

为什么前面有逗号?

最佳答案

你可以做一些简单的事情,比如:

str = "MyProgramm build version 0.0.7.161"
str.scan(/\d+/).join('.') # => "0.0.7.161"

如果您知道字符串中的唯一数字在版本子字符串中,那很好。但是,如果应用名称中包含数字会怎样?

str = "HTML2PDF build version 0.0.7.161"
str.scan(/\d+/).join('.') # => "2.0.0.7.161"

或更糟:

str = "foobar_v1.0 build version 1.0.7.161"
str.scan(/\d+/).join('.') # => "1.0.1.0.7.161"

显然这不是您想要的,因此,此时代码必须变得更智能。如果版本子串总是在字符串的末尾,那么像这样的东西会起作用:

str = "HTML2PDF build version 0.0.7.161"
str.split.last.scan(/\d+/).join('.') # => "0.0.7.161"

但是,既然您有了子串,您打算用它做什么呢?把它比作什么?您无法通过比较此类字符串来了解一个版本是否低于另一个版本:

"0.0.7.161" < "0.0.7.2" # => true

比较字符与比较整数不同,因此需要更多智能,或者至少需要一些东西来确保字符串按所需顺序排序/比较:

str.split.last.scan(/\d+/).map{ |s| '%03d' % s.to_i }.join('.') # => "000.000.007.161"
"000.000.007.161" < "000.000.007.002" # => false

或者相反:

"000.000.007.002" < "000.000.007.161" # => true

版本号比较是一个问题,您会发现人们已经尝试过各种方法来处理它。有几次我需要这样做时,我转而使用 Ruby 的 Gem::Version 中的代码。类,这有帮助。尽管如此,您还是会时不时地遇到奇怪的事情,并且必须找出适合您的情况的方法。

关于ruby - 使用正则表达式获取版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24144719/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com