電子書籍の厳選無料作品が豊富!

プログラミング言語rubyの正規表現について質問です。

大学の授業でrubyをやっているのですが、
下記の文字列をパターンマッチさせる方法がわかりません。
日本語とアルファベットが混ざっているときに
どのような正規表現のパターンを作ったらよいかわかりません。

「|」はただの文字として扱いたいです。
1行でひとかたまりです。

どなたか教えてくださいませんか。
よろしくお願いします。

↓ネタ|ネタのローマ字表記|皿の色|値段  の順に並んでいます。

生うに|namauni|gold|420
甘えび|amaebi|red|120
さわら|sawara|green|180
ねぎとろ|negitoro|green|180
さんま|sanma|green|180
納豆巻|nattomaki|red|120
いくら|ikura|blue|240
とり貝|torigai|gold|420
こはだ|kohada|red|120
つぶ貝|tsubugai|green|180
たらこ|tarako|red|120
赤貝|akagai|blue|240
ひらめ|hirame|gold|420
サーモン|salmon|blue|240
しまあじ|shimaaji|blue|240
中とろ|chuutoro|gold|420

A 回答 (3件)

#2です。


以下のようなスクリプトを書いて実行してください。
--------------------------------
fh = open("data.txt")
while line = fh.gets
#もしデータに期待しない文字列を含むものがあるなら、スキップする
# 期待する文字列は、3つの|が存在し、各々の|の両端に|以外の文字が1文字以上存在すること
if /^[^|]+\|[^|]+\|[^|]+\|[^|]+$/ !~ line
#上記条件の文字列でないなら、次の行へ移る
next
end
#改行文字を削除する
line.chomp!
# |で分割する
elm = line.split("\|")
# 4つの部分に分かれるので、それらを印字する
print elm[0],"\n"
print elm[1],"\n"
print elm[2],"\n"
print elm[3],"\n"
end
--------------------------------
データは、data.txtという名称のファイルに格納されているものとします。
起動オプションで -Ksを指定してください。(文字コードの指定)
コマンドを実行したディレクトリと同じ場所にに、このdata.txtをおいて実行してください。
4つの個々の部分が、画面に表示されます。
なお、データが全て、例に出されたようなクリーンなデータだけなら、
if /..../ !~ line
end
の部分はなくてもかまいません。
    • good
    • 0
この回答へのお礼

ありがとうございます!!

とても参考になりました。
挑戦してみます。

お礼日時:2011/01/05 21:32

補足要求1:


質問する場合は、rubyのバージョーン(1.8,1.9等)と漢字の文字コード(シフトJIS,UTF-8,EUC等)を提示してください。それらにより、回答が異なる場合がありますので。

補足要求2:
今回の質問で、データは以下のようにならんでいるのでしょうか?
1行目:生うに|namauni|gold|420
2行目:甘えび|amaebi|red|120

補足要求3:
また、上記の文字列にマッチしたとして、本当になさりたいことは、
生うに|namauni|gold|420 を
「生うに」と「namauni」と「gold」と「420」とに分けて取り出したいということではないでしょうか?

この回答への補足

補足1
rubyのバージョンは1.8です。
漢字の文字コードはシフトJISです。

補足2
データはtatsu99さんのおっしゃるとおり、
1行目:生うに|namauni|gold|420
2行目:甘えび|amaebi|red|120
のように並んでいます。

補足3
そうです。
1行のデータをgetsで読み込み、パターンマッチさせてデータのような文字列であった場合に、
splitメソッドでデータを4つに分けたいのです。

質問の説明が足りなくて申し訳ありません。
よろしくお願いします。

補足日時:2011/01/05 20:08
    • good
    • 0

どんな正規表現でも「パターンマッチさせる」ことはできます.


マッチングが成功するかどうかは別の話.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
パターンマッチというものがまだ良くわからない素人ですので
足りない部分が多々あります。

お礼日時:2011/01/05 21:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!