我不确定您为什么要在这里使用正则表达式解决方案;该输入字符串在我看来显然是结构化的,您可能会通过在分隔符上拆分它以将其转换为更方便的数据结构来做得更好。
像这样的东西:
input = "ABC:2fg45rdvsg|Pizzahut:j34532jdhgj|Dominos:3424232|Pizzahut:3242237|Wendys:3462783|Pizzahut:67688873rg"
converted_input = input
.split('|') #=> ["ABC:2fg45rdvsg", "Pizzahut:j34532jdhgj", ... ]
.map { |pair| pair.split(':') } #=> [["ABC", "2fg45rdvsg"], ["Pizzahut", "j34532jdhgj"], ... ]
.group_by(&:first) #=> {"ABC"=>[["ABC", "2fg45rdvsg"]], "Pizzahut"=>[["Pizzahut", "j34532jdhgj"], ... ], "Dominos"=>[["Dominos", "3424232"]], ... ]
.transform_values { |v| v.flat_map(&:last) }
(上述一系列转换只是一种可能的方式;您可能会想出十几个类似的替代步骤来将此输入转换为如下所示的相同哈希!例如,通过使用reduce
甚至CSV
库。)
这给了你最终的结果:
converted_input = {
"ABC" => ["2fg45rdvsg"],
"Pizzahut" => ["j34532jdhgj", "3242237", "67688873rg"],
"Dominos" => ["3424232"],
"Wendys" => ["3462783"]
}
现在数据的格式已经很方便了,像原始请求一样获取数据就变得很简单了:
converted_input["Pizzahut"].join(',') #=> "j34532jdhgj,3242237,67688873rg"
(虽然很可能将其保留为Array
,而不是逗号分隔更合适String
!!)