我希望我的程序一起替换两个奇数的任何模式,在它们之间输入短划线
我最初的想法是利用gsub
但是,
num.gsub(/[13579][13579]/, '\1-\1')
但这只是让我在一个奇数之前得到一个破折号,即:
'575'.gsub(/[13579][13579]/, '\1-\1')
#=> -5
我希望它输出5-7-5
。我希望12457
之类的数字输出为1245-7
答案 0 :(得分:2)
添加分组'575'.gsub(/([13579])[13579]/, '\1-\1')
会输出"5-55"
,但这仍然不正确。
你可以像这样使用零宽度正向前瞻:
'575'.gsub(/([13579])(?=[13579])/, '\1-')
#=> "5-7-5"
'12457'.gsub(/([13579])(?=[13579])/, '\1-')
#"1245-7"
答案 1 :(得分:1)
我更喜欢@YuHao的答案,但这是一种不使用正则表达式的方式:
def insert_dashes(str)
str.chars
.each_cons(2)
.map { |i,j| (i.to_i.odd? && j.to_i.odd?) ? i+'-' : i }
.join + str[-1]
end
insert_dashes('575') #=> "5-7-5"
insert_dashes('12457') #=> "1245-7"
insert_dashes('417386523792') #=> "41-7-386523-7-92"