使用Ruby,我如何获得两个字符串之间的差异,然后使用相同的部分作为基础来分割其余部分?
对于示例,我有两个字符串(并非所有字符串都具有此格式):
String1 = "Computer: Person1, Title: King, Phone: 555-1212"
String2 = "Computer: PersonB, Title: Queen, Phone: 123-4567"
我希望能够比较(差异)两个字符串,以便得到结果:
["Computer: ",", Title:",", Phone:"]
然后使用它来重新分析原始字符串以获取:
["Person1","King","555-1212"] and ["PersonB","Queen","123-4567"]
我可以使用前一个数组在db / storage中标记。
是否有这样做的功能以及如何实现这些结果?
这个目的不需要事先了解格式化。这样,仅分析数据以进行图案化,然后将其分开。它可以是逗号分隔,新行,间隔等等。
我正在寻找gem“diffy”和“diff-lcs”,看看他们是否可以帮助解决这个问题。
答案 0 :(得分:1)
我认为你需要的只是一个哈希,哈希你可以做任何奇特的事情。
>> String1 = "Computer: Person1, Title: King, Phone: 555-1212"
>> a = String1.gsub(/[^\s\:]/) { |w| "\"#{w}\"" }
>> a.insert(0, "{")
>> a.insert(-1, "}")
>> a1 = JSON.parse(a)
>> #=> {
"Computer" => "Person1",
"Title" => "King",
"Phone" => "555-1212"
}
然后您可以请求您想要的内容,例如
>> a1["Computer"]
>> #=> "Person1"
添加强>
您可以将其抽象为进一步的方法
def str_to_hash(str)
ouput = str.gsub(/[^\s\:]/) { |w| "\"#{w}\"" }
output.insert(0, "{").insert(-1, "}")
JSON.parse(out)
end
>> h2 = str_to_hash(String2)
>> h2["Computer"]
>> #=>"PersonB"
答案 1 :(得分:1)
String1 = "Computer: Person1, Title: King, Phone: 555-1212"
String2 = "Computer: PersonB, Title: Queen, Phone: 123-4567"
keys = String1.split - (String1.split - String2.split)
values = String1.split - keys
您需要找到适合您的特定数据进行拆分的方法。例如,如果允许值包含双引号内的空格,则可以使用.split(/"?[^ ]*\ ?[^ ]*"?/)
之类的内容,但是没有通用的解决方案可以处理任何类型的数据。
然后你需要清理结果值。
答案 2 :(得分:0)
鉴于这些字符串,我宁愿按,
拆分列,然后使用:
之前的部分作为列的名称。
有一个longest common subsequence problem,它有一些事情可做,但不够聪明,无法处理数据的语义。
答案 3 :(得分:0)
s1 = String1.split(' ')
s2 = String2.split(' ')
s1 - s2
=> ["Person1,", "King,", "555-1212"]
s2 - s1
=> ["PersonB,", "Queen,", "123-4567"]