2017-05-12 16 views
0

正規表現に問題があります。だから基本的に私はフォルダがあり、このフォルダにはサブフォルダとファイルが含まれています。私はそれらのフォルダの特定の単語をチェックする必要があります。私が確認しなければならない言葉は、words.txtというファイルにあります。フォルダ/サブフォルダとファイル内の単語を確認する

これは、私はRubyで、これまで持っているコードです:

def check_words 
    array_of_words = File.readlines('words.txt') 
    re = Regexp.union(array_of_words) 
    new_array_of_words = [/\b(?:#{re.source})\b/] 

    Dir['source_test/**/*'].select{|f| File.file?(f) }.each do |filepath| 
    new_array_of_words.each do |word| 
    puts File.foreach(filepath).include?(word) 
    end 
    end 
end 

私はこのコードを実行すると、私は、フォルダ/サブフォルダ内のファイルのいくつかはそれらの単語が含まれているにもかかわらず、falseを得続けます。

+0

あなたは –

+0

申し訳ありませんRubyの言語 –

答えて

0

new_array_of_wordsは単一の正規表現であり、include?メソッドは文字列に対して機能します(とにかく1つの正規表現で繰り返し処理することはあまり意味がありません)。

正規表現をそのまま使用できますが、regex methods insteadを使用してください。

次のようにまた、あなたの現在のコードを修正することができます。

arr = File.readlines('/home/afifit/Tests/word.txt') 
arr.select { |e| e.strip! } 

Dir['yourdir/*'].select{|f| File.file?(f) }.each do |filepath| 
    arr.each do |word| 
    puts File.foreach(filepath).include?(word) 
    end 
    end 

私はまた、不要な空白や改行を削除するためにstripを使用。

+0

[コードと出力の画像](http://i.imgur.com/V9LVSCp.png) だから、あなたが提案したコードを実装し、I使用している言語にタグを付けてください。まだチェックされているすべてのファイルに対してfalseになる –

+0

次のように正規表現を試してみてください: 'File.foreach(filepath)do | w | re.match(w)end'。 – afifit

+0

[エラー](http://i.imgur.com/8twPhtV.png)このエラーが発生しました。 –

関連する問題