我正在玩Ruby,为我做一些文件版本控制。我有一个字符串2.0.0.65
。我将其拆分,增加内部版本号(65 - > 66)然后我想用66替换65.虽然在这个替换中,我只想替换字符串的最后一个匹配。 Ruby中最好的方法是什么?
version_text = IO.read('C:\\Properties')
puts version_text
version = version_text.match(/(\d+\.\d+\.\d+\.\d+)/)[1]
puts version
build_version = version.split('.')[3]
puts build_version
incremented_version = build_version.to_i + 1
puts incremented_version`
...
答案 0 :(得分:10)
如果你只想在字符串的最后增加整数,那么试试这个:
s = '2.0.0.65'
s.sub(/\d+\Z/) {|x| x.to_i + 1} # => '2.0.0.66'
答案 1 :(得分:5)
您可以这样做:
parts = "2.0.0.65".split('.')
parts[3] = parts[3].to_i + 1
puts parts.join(".")
输出:
2.0.0.66
这使您可以更好地控制使用字符串替换方法,因为现在您可以更轻松地增加版本字符串的其他部分。
答案 2 :(得分:2)
sample = '2.0.0.65'
def incr_version(version)
parts = version.split('.')
parts[-1] = parts[-1].to_i + 1
parts.join('.')
end
incr_version(sample) # => '2.0.0.66'
答案 3 :(得分:2)
一旦你有一个带有内部版本号的字符串,你只需要使用'succ'方法
'2.0.0.65'.succ()
它为您提供了字符串
'2.0.0.66'
答案 4 :(得分:1)
为了好玩,如果你想增加任何字符串中的最后一个整数,你可以这样做:
str = "I have 3 cats and 41 rabbits"
str.reverse.sub(/\d+/){ |s| (s.reverse.to_i+1).to_s.reverse }.reverse
#=> "I have 3 cats and 42 rabbits"
仅当您修改正则表达式以匹配文本的反转版本时,此选项才有效。
更一般地说,你可以这样做:
class String
# Replace the last occurrence of a regex in a string.
# As with `sub` you may specify matches in the replacement string,
# or pass a block instead of the replacement string.
# Unlike `sub` the captured sub-expressions will be passed as
# additional parameters to your block.
def rsub!(pattern,replacement=nil)
if n=rindex(pattern)
found=match(pattern,n)
self[n,found[0].length] = if replacement
replacement.gsub(/\\\d+/){ |s| found[s[1..-1].to_i] || s }
else
yield(*found).to_s
end
end
end
def rsub(pattern,replacement=nil,&block)
dup.tap{ |s| s.rsub!(pattern,replacement,&block) }
end
end
str = "I have 3 cats and 41 rabbits"
puts str.rsub(/(?<=\D)(\d+)/,'xx')
#=> I have 3 cats and xx rabbits
puts str.rsub(/(?<=\D)(\d+)/,'-\1-')
#=> I have 3 cats and -41- rabbits
puts str.rsub(/(?<=\D)(\d+)/){ |n| n.to_i+1 }
#=> I have 3 cats and 42 rabbits
请注意(与rindex
一样),因为正则表达式搜索从字符串的结尾开始,您可能需要制作一个稍微复杂的正则表达式来强制您的匹配贪婪。