早く正規表現から抜け出さないとな。。
クラス作ってからすこしやりやすくなりました。
二冊の本で正規表現の学習を進めているんですが,
- 作者: Jeffrey E.F. Friedl,株式会社ロングテール,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/26
- メディア: 大型本
- 購入: 24人 クリック: 754回
- この商品を含むブログ (86件) を見る
もっと詳しく,または熟練したら読めるようになるのかな。。現状無理。
反復学習ソフト付き 正規表現書き方ドリル (WEB+DB PRESS plus)
- 作者: 杉山貴章,木本裕紀
- 出版社/メーカー: 技術評論社
- 発売日: 2010/12/22
- メディア: 大型本
- 購入: 3人 クリック: 54回
- この商品を含むブログ (9件) を見る
さらさら頭に入ってきます。
で,やはり主の課題は私は化学反応式の分解なんです。
()をどうしようかなぁというのをとにかく漠然ととらえつつ不安を抱えたまま進んでいたんですが,
簡単ですね。
Al2(SO4)3 とかありますけど, Al2SO4SO4SO4 とかに置換すればいいだけですね。括弧の中身と括弧直後の数字を読み取れば,これは可能。
通常の方法ならこれも大変なのかもしれませんが,正規表現ならとても簡単。
パターン "\((.+?)\)([0-9]+)"でひっかけると,
SubMatchesの中にちゃんと括弧の中身とその直後の数値を捕捉していることがわかります。
ありえない化学式ですが, (NH4)4(CO3)2とかなら
こんな感じです。二回ヒットして,それぞれ中身と外の数字を捕捉できています。
前回作ったクラスではReplaceメソッドを実装しわすれていましたので,それを実装することと,エラー処理を実装することが今の課題です。
パターンがおかしいとエラーコード5017を訴えてくるので,それはエラー処理で補足するようにしてあげましょう。一応そっちはもう修正しましたけど・・
replaceまでまとめて実装してから,もう一度記事に載せておくことにします。
あと,文字列を繰り返す部分です。VBAのString関数でできるのかなーと思いましたが,それだけでは無理でした。
二段階でできそうではありますね。String関数では一文字だけなら与えた数値の分繰り返してくれるので,元の文字列に絶対ないような文字をダミーとして数値分の数繰り返したあと,replaceでさらにもう一度ダミー文字を括弧の中身の文字に置き換えてやれば一行で処理を書けるようです。
今日はSubMatchesがちょっと私のいうことを聞いてくれたので,もうちょい読み込めばいけるのかもしれない。
私自身としては,あきらかに理解が進んでいるので,面白くてたまらないんですが,記事としては地味極まりない日々が続いていますので,
早く決着をツケナイトナー(;´▽`A``