前提・実現したいこと
C#で現在、与えられた化学式の中から、原子数をカウントしようとしています。
例えば"C16H34O"といった化学式が与えられた場合、Cの数が「16」、Hの数が「34」、Oの数が「1」といった情報を取得する必要があります。
発生している問題・エラーメッセージ・現状のコード・試したこと
当方正規表現の使い方に慣れておらず、インターネット等で調べながら、ひとまず例えばC16の部分を抜き出すには以下のような記載をすれば良いことは分かりました。
C#
1MatchCollection cnum = Regex.Matches(Formula, "C[0-9][0-9]");
上記コードでC16H34Oを渡してやると、C16の部分が抜き出せるため、後はCでsplitしてやればCの数が16と得られそうです。
しかし、例えばCH4O等を渡した場合は、パターンがC[0-9][0-9]ではなく、C[0-9]となるため、上記のパターンでは抽出することができません。
以下のように複数のケースを作っておけば、それぞれ抽出できるのですが、もう少しスマートなやり方がないかなと思い質問させていただいております。 (以下と同様のことをH、O、N等様々な原子種についても行おうとすると平坦で長いコードになってしまうので、、、)
C#
1MatchCollection cnum = Regex.Matches(Formula, "C[0-9][0-9]"); 2MatchCollection cnum2 = Regex.Matches(Formula, "C[0-9]"); 3MatchCollection cnum3 = Regex.Matches(Formula, "C");
専門の方のお知恵をお貸しいただけると大変有難いです。
宜しくお願いいたします。
補足情報(FW/ツールのバージョンなど)
visual studio2019
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/05 03:11
2020/02/07 09:29
2020/02/10 04:45