我是Ruby的新手,我需要帮助 我有一个.txt的样本部分
Modified : /Analitics/Documents/HTZ/BR-5545 Credit/Example BR-5545.docx
Modified : /Analitics/Documents/HTZ/BR-5545 Credit/HTZ BR-5545 Example.docx
我只需找到行中的数字,只需一次。 (仅出现一次的唯一数字组) 使用regexp我找到数字
line=~/(BR-\d*)/
my=line.scan(/(BR-\d*)/)
输出:
`[["BR-5545"], ["BR-5545"]]`
但我需要一次:
`[["BR-5545"]`
请帮助我如何转换我的正则表达式
答案 0 :(得分:3)
扫描后只需添加uniq!
:
data = "Modified : /Analitics/Documents/HTZ/BR-5545 Credit/Example BR-5545.docx"
data.scan(/(BR-\d*)/).uniq! # [["BR-5545"]
答案 1 :(得分:2)
使用Set而不是数组:
require 'set'
lines=[
'Modified : /Analitics/Documents/HTZ/BR-5545 Credit/Example BR-5545.docx',
'Modified : /Analitics/Documents/HTZ/BR-5545 Credit/HTZ BR-5545 Example.docx'
]
lines.inject(Set.new) {|s, l| s.merge(l.scan(/BR-\d+/)); s}
# => #<Set: {"BR-5545"}>
# or as an array
lines.inject(Set.new) {|s, l| s.merge(l.scan(/BR-\d+/)); s}.to_a
# => ["BR-5545"]
答案 2 :(得分:1)
给出input.txt
这样的文件:
Modified : /Analitics/Documents/HTZ/BR-5545 Credit/Example BR-5545.docx
Modified : /Analitics/Documents/HTZ/BR-5545 Credit/HTZ BR-5545 Example.docx
你可以用这个
获得你想要的东西File.open('input.txt').inject([]) do |array, line|
array << line.scan(/(BR-\d*)/)
end.flatten.uniq
基本上:
array
变量,该变量初始化为[]