正则表达式在大括号和引号之间得到单词(只是单词)

时间:2012-03-19 17:50:08

标签: ruby regex

我在Ruby中得到了一个字符串:

str = "enum('cpu','hdd','storage','nic','display','optical','floppy','other')"

现在我想只返回一个只包含单词的数组(不是引号,在圆括号之间(......)。下面的正则表达式有效,但包括我不需要的'枚举'。

str.scan(/\w+/) 

预期结果应为:

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

谢谢!

2 个答案:

答案 0 :(得分:2)

我建议使用negative lookahead来消除(后面的单词:

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

编辑:正则表达式已更新,现在它也排除了\w,因此它不会匹配字词前缀。

答案 1 :(得分: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"}