我有这样的判断力:
(.*?)("DisplayName":.*?)(,)(.*?"Groups":?)?(\[.*?\])?(,)(.*?"Phones":)?(\[.*?\])?(.*?\},)?我想用它来处理这样的字符串:
{“亲和力”:20,"DisplayName":"Moe Larry",“电子邮件”:{“地址”:“moelarry@gmail.com”,“主”:真,“类型”:{“Id”:“HOME”},“FullName”:{“FamilyName”:“拉里”,"GivenName":"Moe",“非结构化”:“Moe拉里”},“组”:{“Id”:“^0,”},"Id":"1234567890","MailsSent":0,“名称”:“Moe Larry”、“电话”:{“号码”:“555-999-6661”、“类型”:{“Id”:“移动”}、“ProfileLink”:“}”、{“亲和”:20、“DisplayName”:“stoogesare滑稽”、“电子邮件”:{“Address”:“stoogesare滑稽”、“主”:true}、“EvergreenPhoto”:“/照片/私有/adflk”;jsd394u75430o8752380974321jtkasdljf8937489213749832654","Id":"834754hthbf83744823f","MailsSent":0},{“亲和”:20,"DisplayName":"stoogesarefunny@gmail.com","Emails":{"Address":"stoogesarefunny@gmail.com",“主”:true},"EvergreenPhoto":"/photos/private/asdfAJDKLJSFIOEJHLTHSJKLDF234987s897KJHSDFKJHDF89273473ASLKJDLSKJIFEIH","Id":"834754hthbf83744823f","MailsSent":0,"ProfileLink":"https://profiles.google.com/stoogesarefunny"},{“亲和”:20,"DisplayName":"Shemp","FullName":{"GivenName":"Shemp",“Unstructured”}:“Shemp”},“Groups”:{“Id”:“^GivenName”},"Id":"1234567890","MailsSent":0,"Name":"Shemp","Phones":{"Number":"+15553085671",“Type”:{“Id”:“其他”}},{“亲和”:20,"DisplayName":"ClownFace","FullName":{"GivenName":"ClownFace",“非结构化”:“ClownFace”},“组”:{“Id”:“^Id”},"Id":"1234567890","MailsSent":0,“名称”:“ClownFace”,“电话”:{“数字”:“+15556064040”,“类型”:{“Id”:“其他”}},
我知道这真的很难看。我希望我能找到一个xml提要,但现在这不是一个选项。
我只关心DisplayName、团体和电话。我需要提取并保存在数组中。组和电话的捕获组需要是可选的,因为并非所有联系人都有它们。然而,我的判断力给了我:
Result 1
1. {"Affinity":20,
2. "DisplayName":"Moe Larry"
3. ,
4. "Emails":[{"Address":"moelarry@gmail.com","Primary":true,"Type":{"Id":"HOME"}}],"FullName":{"FamilyName":"Larry","GivenName":"Moe","Unstructured":"Moe Larry"},"Groups":
5. [{"id":"^Mine"}]
6. ,
7. "Id":"1234567890","MailsSent":0,"Name":"Moe Larry","Phones":
8. [{"Number":"555-999-6661","Type":{"Id":"MOBILE"}}]
9. ,"ProfileLink":""},
Result 2
1. {"Affinity":20,
2. "DisplayName":"stoogesarefunny"
3. ,
4. "Emails":[{"Address":"stoogesarefunny","Primary":true}],"EvergreenPhoto":"/photos/private/adflk;jsd394u75430o8752380974321jtkasdljf8937489213749832654","Id":"834754hthbf83744823f","MailsSent":0},{"Affinity":20,"DisplayName":"stoogesarefunny@gmail.com","Emails":[{"Address":"stoogesarefunny@gmail.com","Primary":true}],"EvergreenPhoto":"/photos/private/asdfAJDKLJSFIOEJHLTHSJKLDF234987s897KJHSDFKJHDF89273473ASLKJDLSKJIFEIH","Id":"834754hthbf83744823f","MailsSent":0,"ProfileLink":"https://profiles.google.com/stoogesarefunny"},{"Affinity":20,"DisplayName":"Shemp","FullName":{"GivenName":"Shemp","Unstructured":"Shemp"},"Groups":
5. [{"id":"^Mine"}]
6. ,
7. "Id":"1234567890","MailsSent":0,"Name":"Shemp","Phones":
8. [{"Number":"+15553085671","Type":{"Id":"OTHER"}}]
9. },
Result 3
1. {"Affinity":20,
2. "DisplayName":"ClownFace"
3. ,
4. "FullName":{"GivenName":"ClownFace","Unstructured":"ClownFace"},"Groups":
5. [{"id":"^Mine"}]
6. ,
7. "Id":"1234567890","MailsSent":0,"Name":"ClownFace","Phones":
8. [{"Number":"+15556064040","Type":{"Id":"OTHER"}}]
9. },很明显,Shemp的所有联系数据都被合并到stoogesare好笑@gmail.com的数据中,因为我的regex一直在咬牙切齿,直到它到达Shemps Group,而不是在他的显示名之前停下来重新开始。帮助?
记者:不,我不打算拯救所有这些群体,最终,这只是为了让我能够研究发生了什么。
发布于 2011-12-14 23:44:55
您的输入类似于JSON,其中已经有用于Ruby的解析器:
gem install json然后在红宝石:
data = JSON.parse(string)然后,您可以作为哈希对象直接访问data,例如:
data = '
{"Affinity":20,
"DisplayName":"Moe Larry",
"Emails":[{"Address":"moelarry@gmail.com","Primary":true,"Type":{"Id":"HOME"}}],
"FullName":{"FamilyName":"Larry","GivenName":"Moe","Unstructured":"Moe Larry"},
"Groups":[{"id":"^Mine"}],
"Id":"1234567890",
"MailsSent":0,
"Name":"Moe Larry",
"Phones":[{"Number":"555-999-6661","Type":{"Id":"MOBILE"}}],
"ProfileLink":""
}
'
require 'json'
user = JSON.parse(data)
user.class # => Hash
user.keys # => ["Affinity", "DisplayName", "Emails", "FullName", "Groups", "Id", "MailsSent", "Name", "Phones", "ProfileLink"]
user['Affinity'] # => 20
user['DisplayName'] # => "Moe Larry"
user['Emails'] # => [{"Address"=>"moelarry@gmail.com", "Primary"=>true, "Type"=>{"Id"=>"HOME"}}]
user['Emails'].class # => Array
user['Emails'][0] # => {"Address"=>"moelarry@gmail.com", "Primary"=>true, "Type"=>{"Id"=>"HOME"}}
user['Emails'][0]['Address'] # => "moelarry@gmail.com"https://stackoverflow.com/questions/8513306
复制相似问题