2012-03-19 7 views
0

私はこのようなRubyで文字列を持っを取得します。。丸括弧(...)作品、言い訳以下の正規表現は、私は必要としない '列挙型' を含む正規表現は、中括弧と引用符の間の単語(言葉だけ)

str.scan(/\w+/) 

期待される結果は次のようになります。

{"OPTICAL"=>"optical", "DISPLAY"=>"display", "OTHER"=>"other", "FLOPPY"=>"floppy", "STORAGE"=>"storage", "NIC"=>"nic", "HDD"=>"hdd", "CPU"=>"cpu"} 

ありがとう!

+1

あなたは収縮や所有権を持たないと確信していますか? – deltree

+0

ええ、実際にはRailsのsql_type(アクティブモデル)です。私は確かに単純な文字列を含むことになります。 – Roger

答えて

2

私は(に続く単語を排除するためにnegative lookaheadを使用することをお勧めしたい:

str.scan(/\w+(?!\w|\()/) 

編集:正規表現が更新され、今ではまた\wを除外し、それが単語の接頭辞と一致しません。

+0

thx!しかし、これは返されます:["enu"、 "cpu"、 "hdd"、 "storage"、 "nic"、 "display"、 "optical"、 "floppy"、 "other"] – Roger

+0

@Rogier lolあなたは正しいです!答えが更新されました。これで正常に動作するはずです(Rubularでテストされ、期待される結果が得られました)。 – mgibsonbr

1

この出力が必要な場合は、これが有効です。

str = "enum('cpu','hdd','storage','nic','display','optical','floppy','other')" 
arr = str.scan(/'(\w+)'/) 
hs = Hash[arr.map { |e| [e.first.upcase,e.first] }] 
p hs #=> {"CPU"=>"cpu", "HDD"=>"hdd", "STORAGE"=>"storage", "NIC"=>"nic", "DISPLAY"=>"display", "OPTICAL"=>"optical", "FLOPPY"=>"floppy", "OTHER"=>"other"} 
関連する問題