我正在尝试从字符串中提取整数,并使用它们来扫描YAML文件,如下所示:
FORMS = YAML.load_file('../email/lib/lists/form_links.yml')
def get_form(form)
form_num = form.scan(/\d+/)
data = FORMS['esd_forms'][form_num]
begin
if data != nil
"Form link: #{data}"
else
raise StandardError
end
rescue StandardError
"** Form: #{form} is not a valid form name **"
end
end
YAML文件:
esd_forms:
1: 'http://labornet.com/itc/ESD-1.pdf'
2: 'http://labornet.com/itc/ESD-2.pdf'
3: 'http://labornet.com/itc/ESD-3.pdf'
4: 'http://labornet.com/itc/ESD-4.pdf'
5: 'http://labornet.com/itc/ESD-5.pdf'
6: 'http://labornet.com/itc/ESD-6.pdf'
7: 'http://labornet.com/itc/ESD-7.pdf'
8: 'http://labornet.com/itc/ESD-8.pdf'
9: 'http://labornet.com/itc/ESD-9.pdf'
10: 'http://labornet.com/itc/ESD-10.pdf'
11: 'http://labornet.com/itc/ESD-11.pdf'
03: 'http://labornet.com/itc/OCIO-IT-03.pdf'
07: 'http://labornet.com/itc/OCIO-IT-07.pdf'
10: 'http://labornet.com/itc/OCIO-10.pdf'
13: 'http://labornet.com/itc/ESD-13.pdf'
14: 'http://labornet.com/itc/ESD-14.pdf'
当我这样做时,我得到一个错误:
wrong argument type Array (expected Regexp)
我不明白为什么会收到此错误。起初我以为是因为程序返回的是数组而不是字符串,所以我在IRB中进行了尝试:
irb(main):001:0> form = 'esd-2'
=> "esd-2"
irb(main):002:0> form_num = form.scan(/\d+/)
=> ["2"]
irb(main):003:0> puts form_num
2
对我来说,看来我做得正确。我究竟做错了什么?
String#scan
在数组中返回与正则表达式匹配的String中的所有匹配项。
您在执行irb会话时看到form_num = form.scan(/\d+/)
,它实际上返回一个包含1个元素的数组["2"]
。
如果要返回第一个匹配的段,可以使用String#[]
:
form = 'esd-2'
form_num = form[/\d+/]
#=> "2"
此外,如果您需要检查存储在变量中的内容,那p
将是比更好的选择puts
。p
就像您在irb会话中看到的那样,默认情况下,irb实际上用于输出表达式结果。
form = 'esd-2'
form_num = form.scan(/\d+/)
puts form_num
#=> 2
p form_num
#=> ["2"]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句