2011-12-14 10 views
0

私はこのような正規表現があります:私はこのような文字列を処理したいキャプチャグループを作成する方法Rubyの「スキャン」方法を使用してオプション?

(.*?)("DisplayName":.*?)(,)(.*?"Groups":?)?(\[.*?\])?(,)(.*?"Phones":)?(\[.*?\])?(.*?\},)? 

れる:

{ "親和性":20、 "表示名": "萌えラリー" を、」 {"Id": "HOME"}}]、 "FullName":{"FamilyName": "Larry": "メールアドレス": "{" Address ":" [email protected] " "、" GivenName ":" Moe "、" Unstructured ":" Moe Larry "}、" Groups ":[{" id ":"^Mine "}]、" Id ":" 1234567890 "、" MailsS​​ent ":0 、 "Name": "Moe Larry"、 "Phones":[{"Number": "555-999-6661"、 "Type":{"Id": "モバイル"}}]、 "ProfileLink" }、{"Affinity":20、 "DisplayName": "stoogesarefunny"、 "Emails":[{"住所": "stoogesarefunny"、 "Primary":true}]、 "EvergreenPhoto" "//photos/private/adflk; jsd394u75430o8752380974321jtkasdljf8937489213749832654"、 "Id": "834754hthbf83744823f"、 "MailsS​​ent":0}、{"Affinity":20、 "DisplayName": "[email protected]"、 "Emails":[ 「MailsS​​ent」:0、「ProfileLink」、「ProfileLink」、「Mail」、「Mail」、「Mail」、「Mail」、「Mail」、「Mail」、「Mail」、「Mail」、「Mail」、「Mail」、「Mail」、「Mail」、「Mail」、「Mail」、「Mail」、 ":" https://profiles.google.com/stoogesarefunny "}、{" Affinity ":20、" DisplayName ":" Shemp "、" FullName ":{" GivenName ":" Shemp "、" Unstructured ":" Shemp "}、" Groups " "名前": "Shemp"、 "電話番号":[{"番号": "+ 15553085671"、 "タイプ" {"Id": "OTHER"}}}}、{"Affinity":20、 "DisplayName": "ClownFace"、 "FullName":{"GivenName": "ClownFace"、 "Unstructured": "ClownFace" 「名前」:「ClownFace」、「Phones」:[{"Number"} "、" Groups " : "+ 15556064040"、 "タイプ":{"Id": "OTHER"}}]}

これは本当に醜いです。私はXMLフィードを見つけることができたらいいのに、今はオプションではない。

気になるのは、DisplayName、Groups、およびPhonesです。配列の配列に抽出して保存する必要があります。グループと電話のキャプチャグループは、すべての連絡先にはないため、オプションである必要があります。しかし、私の正規表現は私を与える:明らかに

Result 1 

1. {"Affinity":20, 
2. "DisplayName":"Moe Larry" 
3. , 
4. "Emails":[{"Address":"[email protected]","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":"[email protected]","Emails":[{"Address":"[email protected]","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の連絡先データのすべてを私の正規表現は、それが代わりに彼の表示名の前に停止するのでShempsグループに到達するまで離れてムシャムシャ続けるため[email protected]'sデータに包含されていますそしてやり直す。助けて?

P .:いいえ、これらのグループをすべて保存する予定はありません。最終的には、何が起こっているのかを勉強することができます。

その後
gem install json 

ルビーに:

data = JSON.parse(string) 

あなたはその後、例えば、直接ハッシュオブジェクトとしてdataにアクセスすることができます

+4

あなたが持っている文字列はJSONです。なぜJSONツールを使って処理してみませんか? – Tomalak

+2

JSONサンプルも正しくありません。あなたが私たちに有効なデータを与えてくれれば、より良い答えを得ることができます。あなたが働いていることを示すのに必要な最小限に抑えてください。 –

+0

@Tomalak:私はそれがJSONであることを知らなかったので。私はいくつかのコーディングを行うことを余儀なくされたシステム管理者です。 – kludge

答えて

6

あなたの入力は、そのため、すでにRubyのためにそこパーサさJSON次のようになります。

data = ' 
    {"Affinity":20, 
    "DisplayName":"Moe Larry", 
    "Emails":[{"Address":"[email protected]","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"=>"[email protected]", "Primary"=>true, "Type"=>{"Id"=>"HOME"}}] 
user['Emails'].class   # => Array 
user['Emails'][0]    # => {"Address"=>"[email protected]", "Primary"=>true, "Type"=>{"Id"=>"HOME"}} 
user['Emails'][0]['Address'] # => "[email protected]" 
関連する問題