- 締切済み
Rubyの正規表現、文字の追加
こんばんは。 文章の先頭に指定した文字列を指定した箇所(文頭)のみに追加したいと思っているのですが、 どうもうまくいかないため質問させていただきました。 (1)全角英数字を正規表現で取得できていない (2)unless文の後の条件の複数指定が機能せずエラーになる (3)sub!で置換する以外に文字の追加方法はないか (4)unlessで条件指定しない場合、すべての行の頭に「当事業年度」という文字がついてしまう 上記4つがうまくいっていない要因です。 (3)に関してはinsertを他の手段として考えています。 以下プログラムです。 text.each_line do |t| 56 57 case t 58 when/前事業年度\t銘 柄/ 59 flag = true 60 when/前事業年度\t当事業年度/ 61 flag = false if flag == true 62 end 63 64 t.sub!(/^(\p{Katakana}|[一-龠々]|\w|(株)|\p{Hiragana}|[:upper:]{0,20}[1-9])/) {|d| "前事業年度\t#{$1}"} unless flag == false && /当事業年度/ 65 t.sub!(/^(\p{Katakana}|[一-龠々]|\w|(株)|\p{Hiragana}|[:upper:]{0,20}[1-9])/) {|d| "当事業年度\t#{$1}"} unless flag == false && /前事業年度/ 変換したい文章は以下のものです。 前事業年度 銘 柄 株式数(株) 貸借対照表計上額(百万円) 保有目的 株式会社日本触媒 6,338,000株 7,726,000,000円 当社グループの主要原料供給元であり、取引関係強化の一環として保有している。 ユニ・チャーム株式会社 278,100株 1,533,000,000円 当社グループ製品の販売先であり、取引関係強化の一環として保有している。 栗田工業株式会社 572,600株 1,282,000,000円 当社グループ製品の販売先であり、取引関係強化の一環として保有している。 JXホールディングス株式会社 2,477,050株 1,231,000,000円 当社グループ製品の販売先および主要原料供給元である企業の持株会社であり、取引関係強化の一環として保有している。 KPXChemical 158,621株 967,000,000円 KPXChemical設立時に出資しており、協力関係維持のため保有している。 株式会社ブリヂストン 194,000株 710,000,000円 当社グループ製品の販売先であり、取引関係強化の一環として保有している。 関西ペイント株式会社 214,225株 315,000,000円 当社グループ製品の販売先であり、取引関係強化の一環として保有(取引先持株会による定期買付)している。 当事業年度 銘 柄 株式数(株) 貸借対照表計上額(百万円) 保有目的 KPXHoldings 58,990株 284,000,000円 上記KPXChemicalの株式を40%保有する大株主であり、協力関係強化のため保有している。 大日精化工業株式会社 524,000株 250,000,000円 当社グループ製品の販売先であり、取引関係強化の一環として保有している。 高圧ガス工業株式会社 424,000株 241,000,000円 当社グループ製品の販売先であり、取引関係強化の一環として保有している。 サカタインクス株式会社 202,000株 196,000,000円 当社グループ製品の販売先であり、取引関係強化の一環として保有している。地元企業との関係強化のため保有している。 株式会社松風 138,000株 120,000,000円 地元企業との関係強化のため保有している。 コニシ株式会社 50,000株 91,000,000円 当社グループ製品の販売先であり、取引関係強化の一環として保有している。 稲畑産業株式会社 66,000株 69,000,000円 当社グループ製品の販売および原料購入における代理店であり、取引関係強化の一環として保有している。 日本特殊塗料株式会社 112,000株 68,000,000円 当社グループ製品の販売先であり、取引関係強化の一環として保有している。 電気化学工業株式会社 142,000株 50,000,000円 当社グループ製品の販売先であり、取引関係強化の一環として保有している。 株式会社三菱ケミカルホールディングス 104,500株 44,000,000円 当社グループ製品の販売先および主要原料供給元である企業の持株会社であり、取引関係強化の一環として保有している。 長瀬産業株式会社 31,000株 39,000,000円 当社グループ製品の販売および原料購入における代理店であり、取引関係強化の一環として保有している。 横浜ゴム株式会社 36,000株 34,000,000円 当社グループ製品の販売先であり、取引関係強化の一環として保有している。 前事業年度から下の7行の文頭に「前事業年度」という文字を追加し、 当事業年度から下の行の文頭に「当事業年度」という文字を追加することが目標です。 どうかご教授のほどよろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- tatsu99
- ベストアンサー率52% (391/751)
以下のようにしてください。 --------------------------------------- # ファイル名はsample.htmlとする data = "./sample.html" text = File.open(data) flag = nil text.each_line do |t| skip = false case t when/前事業年度銘 柄株式数/ flag = true skip = true when/当事業年度銘 柄株式数/ flag = false skip = true end if /^\s*$/ =~ t skip = true end if skip == false if flag == true t = "前事業年度" + t end if flag == false t = "当事業年度" + t end end #print t end ---------------------------------------- whenの行は、前事業年度銘□□□柄株式数 としています。(□は全角空白1文字) もし、実際のファイルに 前事業年度 と 銘□□□柄株式数 の間に タブがある場合は \t を入れてください。(当事業年度も同様) 考え方は、以下の通りです。 「前事業年度 と 銘□□□柄株式数」を検知したとき、 その行はスキップし、以降の行の先頭に 「前事業年度」を付加する。 但し、全てが空白の行はスキップする。 当事業年度も同様。