- ベストアンサー
ruby 正規表現について教えてください。お願いします。
スイマセン初心者で、正規表現についてほかのみなさんにとっては、簡単なんだと思いますけど、どうかご回答お願いします。 テキストファイルを読み込んで、ある文字列の、ある場所だけを、出したいです。 テキストは #AAA#(aab acb dde) #BBB#(001) #AAA#(bca kme lmg) #BBB#(002) #AAA#の()の中身は適当な文字列で、他の文字が入ると考えての場合です。 この場合で、 #AAA#の文字列の、#AAA#と()を除いた文字列つまりこの場合だと、 aab acb dde bca kme lmg を出したいんです。 簡単な問題なんだと思いますけど、どうか回答お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
以下のスクリプトを実行して下さい。 while line = DATA.gets if /#AAA#\((.*)\)/ =~ line print $1,"\n"; end end __END__ #AAA#(aab acb dde) #BBB#(001) #AAA#(bca kme lmg) #BBB#(002) --------------------------------- $1に取得したい文字が格納されています。 正規表現で、マッチした部分を()でくくると、マッチしたとき$1に()内文字が格納されています。 ()が複数あれば、その()の順番対応に$1,$2,$3に格納されます。
その他の回答 (2)
- koko_u_
- ベストアンサー率18% (459/2509)
ruby -n -e 'puts $1 if $_ =~ /#AAA#\((.*)\)/' < in_file > out_file か? ワンライナーで書くと Ruby っぽくないかも。
お礼
ワンライナーで書くやりかたは、まだあまりやったことないのですが、 もう少しrubyを理解できるようになったら是非挑戦してみたいです。
多分こんな感じ #AAA#\(([^)]+)\)
お礼
まさにこのとおりでできました。 ありがとうございます。
お礼
ありがとうございます。 上手く実行できました。 また、理解しやすい説明ありがとうございます。 長い時間考えてたのがすぐ理解できました。