Rubyを初めて使用し、テキストファイルを読み込んでパターンが一致するかどうかを確認する作業をしています。私は間違った行をどのように印刷するか分からない。Rubyパターンのマッチングと間違った行の印刷
例えばが、これはテキストファイルです:
id: 1 food: apple, banana
id: 2 food: orange
ids: 3 food: apple, banana
id: 4 food: hello, yellow
id: 5food: apple, banana
これは、次のような結果
id: 1 food: apple, banana
id: 2 food: orange
id: 4 food: hello, yellow
を印刷し
File.open(ARGV[0]) do |f1|
while line = f1.gets
pattern = /id[:] [[:digit:]]+ food[:] [a-z,]+/
puts line.scan(pattern)
end
ファイルを読むしかし、私は間違った行を印刷したいです
ids: 3 food: apple, banana
id: 5food: apple, banana
パターンが一致していないかどうかをチェックして、フォーマットが正しくない行を印刷する方法を確認できません。
私のRubyの教育にぽっかりと穴がありますように私は感じます。 'synset'とは何ですか? –
私は前の答えがこのテストを適切にアンカーするために '/ \ A ... \ z /'を持っていたことは確かです。今すぐあなたがそれらを削除して、これは 'xid:...'と一致します。中間が良いからです。 – tadman
私はあなたの正規表現 'pattern =/id [:] [[:digit:]] + synset [:] [a-z、] + /'を理解していません。まず、Rubyの正規表現の文脈で "synset"について聞いたことはありません。あなたは文書を提供できますか?また、各コロンを文字クラスに入れる必要はなく、 '' id: '"の後に一つのスペースしか許されず、 '' az ''は '' ,, ,,,, " –