2013-06-25 48 views
0

我在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 

我需要找到只排數字和只有一次樣本的一部分。 (唯一的一組數字只出現一次) 用正則表達式,我覺得數字

line=~/(BR-\d*)/ 
my=line.scan(/(BR-\d*)/) 

輸出:

`[["BR-5545"], ["BR-5545"]]` 

但我需要一個時間:

`[["BR-5545"]` 

請幫幫我如何轉換我的正則表達式

回答

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變量,它被初始化爲[]
  • 我們掃描每一行,收集所有的結果後所需的regexp
  • ,我們將其壓平,使得我們有一個單維數組
  • 那麼我們就調用它的uniq刪除重複
3

掃描後只需加上uniq!

data = "Modified : /Analitics/Documents/HTZ/BR-5545 Credit/Example BR-5545.docx" 
data.scan(/(BR-\d*)/).uniq! # [["BR-5545"] 
+0

謝謝!它真的幫我排隊。你能給我一個關於排的colomn的建議嗎?我的意思是現在與uniq!我可以找到一個獨特的行。但是如果我有兩行具有相同的一組數字呢?如果這些設置相同,我只需要存在一行 –

+0

對於這些設置,也可以使用'uniq!':http://ruby-doc.org/core-2.0/Array.html#method-i-uniq –

+0

這個'[[''來吧? –

2

使用一組而不是數組:

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"]