如何在C#中用正则正确分离含负数的数字与数学运算符
问题:C#正则拆分数字(含负数)与运算符列表
需求说明
将输入字符串拆分为两个列表:
- 一个列表存储包含负数的数字,例如字符串
"-9+9+8"需拆分为["-9", "9", "8"] - 另一个列表存储数学运算符,对应上面的例子需得到
["+", "+"]
注:括号由单独函数处理,暂不纳入本次处理范围
最初尝试代码
使用Regex.Split和Regex.Matches实现,但无法正确处理负数场景:
List<string> textSplit = Regex.Split(input, "[*/+-]").ToList(); List<string> operators = Regex.Matches(input, "[*/+-]") .Cast<Match>() .Select(m => m.Value).ToList();
遇到的问题
处理"8--4"这类包含连续负号的字符串时,结果不符合预期:
- 错误输出:数字列表为
["8", "", "4"],运算符列表为["-", "-"] - 预期输出:数字列表为
["8", "-4"],运算符列表为["-"]
中间尝试方案(存在不足)
使用以下正则表达式进行匹配:
- 数字匹配正则:
(?<=[-+\/*])-?\d|^\d - 运算符匹配正则:
(?<=\d)[-+\/*]
处理字符串"-5+8*2/4--6"时:
- 运算符提取结果正确:
["+", "*", "/", "-"] - 数字提取结果不符合预期:
["5", "8", "2", "4", "-6"](预期应为["-5", "8", "2", "4", "-6"])
问题解决
借鉴了Keszas的部分解决方案后,问题已解决。
内容的提问来源于stack exchange,提问作者Antonov Mykola
相关产品推荐
相关产品推荐

