2011-06-18 5 views
3

私はデータフォーマットを変更するためにrubyでファイルを解析しています。私は一時的に変数に格納する3つのマッチグループを持つ正規表現を作成しました。私はすべてが無駄であるので、マッチを保存するのに問題があります。正規表現をルビに保存しますか?

これまで私が読んできたことから、これまで私が持っていたことがあります。

regex = '^"(\bhttps?://[-\w+&@#/%?=~_|$!:,.;]*[\w+&@#/%=~_|$])","(\w+|[\w._%+-][email protected][\w.-]+\.[a-zA-Z]{2,4})","(\w{1,30})' 

begin 
    file = File.new("testfile.csv", "r") 
    while (line = file.gets) 
    puts line 
    match_array = line.scan(/regex/) 
    puts $& 
    end 
    file.close 
end 

ここでは、私がテストに使用しているいくつかのサンプルデータを示します。ちょうどあなたの正規表現リテラルとして「正規表現」の文字列を使用しています

match_array = line.scan(/regex/) 

、あなたのregex変数には何がありません。

"https://mail.google.com","Master","password1","","https://mail.google.com","","" 
"https://login.sf.org","[email protected]","password2","https://login.sf.org","","ctl00$ctl00$ctl00$body$body$wacCenterStage$standardLogin$tbxUsername","ctl00$ctl00$ctl00$body$body$wacCenterStage$standardLogin$tbxPassword" 
"http://www.facebook.com","Beast","12345678","https://login.facebook.com","","email","pass" 
"http://www.own3d.tv","Earth","passWOrd3","http://www.own3d.tv","","user_name","user_password" 

これは動作しません、
LF4

答えて

5

をありがとう。あなたは正しいあなたのscanに大きな醜い正規表現を置くか、正規表現のインスタンスを作成することができ、次のいずれか

regex = Regexp.new('^"(\bhttps?://[-\w+&@#/%?=~_|$!:,.;]*[\w+&@#/%=~_|$])","(\w+|[\w._%+-][email protected][\w.-]+\.[a-zA-Z]{2,4})","(\w{1,30})') 
# ... 
match_array = line.scan(regex) 

そして、あなたはおそらく、(1ルビーが付属しています:1.8.7または1.9)CSVライブラリを使用する必要があります適用し、その後、CSVファイルを解析するためにCSVの各列への正規表現。このようにして引用やエスケープする問題は少なくなります。

+0

ありがとうございました。私は言及されたサイトのどれも検索していないか、または例がRegexp.newを使用しなければならないことを示したすべての検索に驚いています。それがそれでした。再度、感謝します。 – LF4

+0

@ LF4:あなたはCSVパーサーと3つの簡単な正規表現を使うべきだと思います。いずれにしても、複雑な正規表現では(正しいタイプのコースの)変数に入れ、 'scan'呼び出しでその変数を参照するのが正しい方法でした。 –

+0

CSVパーサーを使用するほうがずっと簡単でした。なぜ私は正規表現をする代わりにそれを調べることを考えなかったのか分かりません。 :)すべての助けをありがとう。 – LF4

関連する問題