2015-02-10 46 views
0

我想要讀取文件並創建一個twitter句柄數組。該文件是趨勢鳴叫的隨機收集,片段是:在塊內使用.match()

@David_Cameron @britishchambers #BCCConf Mention of pay rises in the NHS. But what about all the redundancies to enable these pay rises?

在這種情況下,代碼應該返回

["@David_Cameron", "@britishchambers"] 

配售/@\w+/.match(word)[0]作品IRB,但只要我把它放在與eachmap塊:

def read_file(file_path) 
    text = File.open(file_path, 'r'){ |f| f.read}.split(" ") 
    text.each{|word| /@\w+/.match(word)[0] } 
end 

然後我收到錯誤:

NoMethodError: undefined method `[]' for nil:NilClass 

我在做什麼錯?另外,如果我可以在file.open區塊內執行此操作,那就更好了。

+0

請提供樣本輸入和輸出。 – daremkd 2015-02-10 19:54:22

+0

@Emily你應該更新問題,而不是將東西填入評論。 – 2015-02-10 19:58:53

+0

如果至少有一個有價值,您應該接受答案。但是,並不急於這樣做。選擇一個答案太快可能會阻礙其他答案,這是一個禮貌的做法,讓人們在選擇一個答案之前有時間完成答案。許多SO成員在選擇前至少等待幾個小時。當需要做出選擇時,選擇一個你認爲最有幫助的選項。 – 2015-02-10 21:43:30

回答

0
def read_file(file_path) 
    text = File.read(file_path) 
    text.scan(/@\w+/).flatten 
end 

讀取文件,然後使用​​來提取所有的出現。

+0

這幾乎適用於Simone,但它返回的文本沒有我仍然需要的@符號。剛剛嘗試過,沒有括號,它的工作原理。謝謝! – Emily 2015-02-10 20:10:31

1

What am I doing wrong?

通過/@\w+/.match(word)後放置[],你假設word總是匹配/@\w+/,從而返回一個MatchData對象,這是不正確的。例如#BCCConf,不匹配/@\w+/,在這種情況下,/@\w+/.match(word)nil[]未在nil上定義。