如何使用 Dart 将化学方程式中的数字转换为下标(前面有字母、下标或右括号)?

问题描述 投票:0回答:1

我正在尝试编写一个 Dart 函数,将化学方程式中的数字转换为下标,但前提是它们前面有一个字母、另一个下标或右括号。

例如,给定输入:

2H2 + O2 -> 2H2O 我希望将第二次、第三次和第五次出现的数字 2 转换为下标,结果是:

2H2 + O2 -> 2H2O 同样,在 (H2O)3 等情况下,结果应为 (H2O)₃。我在实施和正确识别应该转换数字的条件方面遇到困难。

任何关于如何在 Dart 中实现这一目标的帮助或指导将不胜感激!

regex flutter dart subscript
1个回答
0
投票

您可以使用后视来检查前面的字符是什么,并要求它是数字、字母或右括号:

(?<=[\w)])\d

调用

replaceAllMapped
获取所有匹配项,并使用回调函数将匹配到的数字转换为对应的下标。由于下标字符的 Unicode 代码点处于从 8320 到 8329 的连续范围内,因此我们可以通过简单地向其代码点添加一个常量来转换每个数字:

final result = inputstr.replaceAllMapped(RegExp(r'(?<=[\w)])\d'), (match) {
    return String.fromCharCode(match[0]!.codeUnitAt(0) + 8272);
});

数字 8272 是“0”(48) 和“₀”(8320) 之间的代码点距离。

© www.soinside.com 2019 - 2024. All rights reserved.