我有一个要转换的示例字符串:
#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+)/
解析愉快!