Я пытаюсь разобрать химические формулы в Lua, используя простое сопоставление с образцом. Однако я не знаю, как указать группу захвата как необязательную. Вот шаблон, который я придумал:
pattern = "(%u%l*)(%d*)"
Первая группа фиксирует символ атома (например, «H», «He» и т. д.), а вторая группа фиксирует номер этого атома в молекуле. Это значение обычно является целым числом, но если оно равно 1, оно часто опускается, например:
formula = "C2H6O"
Когда я пытаюсь выполнить глобальное совпадение, если совпадения нет, результатом count
будет ''
вместо того, что я ожидал от nil
.
compound = {}
for atom,count in string.gmatch(formula, pattern) do
compound[atom] = count or 1
end
Очевидно, я мог бы просто проверить, count = ''
но мне было любопытно, есть ли в Lua необязательная группа захвата.