我有一个要转换的示例字符串:

#21inch-#25inch

对此:
#21inch #22inch #23inch #24inch #25inch

使用ruby,请告诉我怎么做。

最佳答案

可以将regex gsub与块匹配替换一起使用,如下所示:

string = "#21inch-#25inch"
new_string = string.gsub(/#\d+\w+-#\d+\w+/) do |match|
  first_capture, last_capture = match.split("-")
  first_num = first_capture.gsub(/\D+/, "").to_i
  last_num = last_capture.gsub(/\D+/, "").to_i

  pattern = first_capture.split(/\d+/)
  (first_num..last_num).map {|num| pattern.join(num.to_s) }.join(" ")
end

puts "#{new_string}"

运行此命令将生成以下输出:
First: #21inch Last: #25inch
First num: 21 Last num: 25
Pattern: ["#", "inch"]
#21inch #22inch #23inch #24inch #25inch

最后一行输出是答案,前面几行显示了逻辑的进展。
这种方法也适用于其他稍有不同的单元格式:
#32ft-#49ft
#1mm-5mm
#2acres-5acres

把这套衣服做成多种用途会很简单在regex中稍有变化,您还可以支持范围格式#21inch..#25inch
/(#\d+\w+)[-.]+(#\d+\w+)/

解析愉快!

10-08 18:58