在 Chef ruby 中获取子字符串值

Getting substring value in Chef ruby

我有一个具有以下值的字符串:

ucp-1.1.0_dtr-2.0.0

我试图从字符串中仅获取 1.1.0。我正在使用以下代码,但它似乎不起作用

substring = ucp-1.1.0_dtr-2.0.0.gsub('ucp-','')

substring = "ucp-1.1.0_dtr-2.0.0".gsub('ucp-','').split("_").first 未尝试过。

试试这个(已验证):

"ucp-1.1.0_dtr-2.0.0".match(/^.<em>-(.</em>)_.<em>-.</em>$ /)[1]

使用带有 ruby 字符串方法的正则表达式你可以实现这个..

"ucp-1.1.0_dtr-2.0.0"

version = "ucp-1.1.0_dtr-2.0.0".scan(/[0-9_]/).join(".").split("_").first.slice(0..-2)

或者用你的代码试试这个..

substring = "ucp-1.1.0_dtr-2.0.0".gsub('ucp-','').split("_").first

String 的 [] 和一个简单的正则表达式就可以做到:

'ucp-1.1.0_dtr-2.0.0'[/[\d.]+/] # => "1.1.0"

这是可行的,因为搜索将在匹配后立即停止,因此第一次出现的结果会导致 1.1.0

如果你想要 second/last 出现然后添加 $ 告诉正则表达式引擎只查看匹配模式的行尾:

'ucp-1.1.0_dtr-2.0.0'[/[\d.]+$/] # => "2.0.0"

Regexp documentation涵盖了所有这些。