文字列入力から化学式を抽出する C# 化学式パーサーを作成しようとしています。H2O などの括弧を含まない化学式でこれを行う方法を見つけました。しかし、Al2(HPO4)3 のような式で括弧を使用してこれを機能させる方法がわかりません。
注意点ですが、これにより、要素 (文字列) と数値の 2 つの変数を持つ" FormulaComponents " と呼ばれるクラスのリストが出力されます。
何か案は?
編集:これが私の現在の試みです。括弧以外はすべて処理します。
public static Formula Parse(string input)
{
var components = new List<FormulaComponent>();
const string elementRegex = "([A-Z][a-z]*)([0-9]*)";
const string validateRegex = "^(" + elementRegex + ")+$";
if (!Regex.IsMatch(input, validateRegex))
throw new FormatException("Input string was in an incorrect format.");
foreach (Match match in Regex.Matches(input, elementRegex))
{
var name = match.Groups[1].Value;
var count = match.Groups[2].Value != "" ?
int.Parse(match.Groups[2].Value) :
1;
if (ElementManager.FindElementBySymbol(name) == null)
throw new FormatException(name + " is not recognized as a valid element symbol.");
components.Add(new FormulaComponent { Element = ElementManager.FindElementBySymbol(name), Quantity = count });
}
return new Formula { Components = components };
}