Dart中未知索引时提取字符串内√x并分组的实现方法
Dart提取字符串中的平方根表达式并生成对应变量
核心思路
利用正则表达式匹配所有从√开始到下一个运算符(示例中为+、-)的内容,无需提前知道索引位置;再根据匹配结果的数量,生成对应变量声明或存入集合管理。
代码实现
import 'dart:core'; void main() { // 定义匹配平方根表达式的正则:匹配√开头,直到遇到+、-或字符串结束的内容 final sqrtRegex = RegExp(r'√[^+\-]+'); // 示例1:单平方根表达式 final userQuestion1 = '10+5-√x+96'; final matches1 = sqrtRegex.allMatches(userQuestion1) .map((match) => match.group(0)!) .toList(); // 生成对应变量声明代码 for (var i = 0; i < matches1.length; i++) { final varName = i == 0 ? 'squareRoot' : 'squareRoot${i+1}'; print('var $varName = \'${matches1[i]}\';'); } print('---'); // 示例2:多个平方根表达式 final userQuestion2 = '10+5-√x+96-√x-2+√x'; final matches2 = sqrtRegex.allMatches(userQuestion2) .map((match) => match.group(0)!) .toList(); for (var i = 0; i < matches2.length; i++) { final varName = i == 0 ? 'squareRoot' : 'squareRoot${i+1}'; print('var $varName = \'${matches2[i]}\';'); } }
输出结果
运行上述代码后,控制台会输出:
var squareRoot = '√x'; --- var squareRoot = '√x'; var squareRoot2 = '√x'; var squareRoot3 = '√x';
补充说明
如果需要在运行时直接处理这些平方根表达式,而非生成变量代码,推荐将匹配结果存入列表:
List<String> squareRootExpressions = sqrtRegex.allMatches(userQuestion) .map((m) => m.group(0)!) .toList();
这种方式更符合Dart静态语言特性,便于后续遍历、修改或计算。
内容的提问来源于stack exchange,提问作者red X
相关产品推荐
相关产品推荐

