我正在尝试编写一个从字符串输入中提取化学式的 C# 化学式解析器。我已经想出了如何使用不包含括号的化学公式(例如 H2O 等)来做到这一点。但是,我不知道如何使用括号来完成这项工作,例如使用 Al2(HPO4)3 之类的公式。
只是一个注释,但这会输出一个名为“ 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 };
}