You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#正则最短匹配问题求助:虚数计算器正则匹配异常

虚数计算器正则匹配问题解决方法

你的问题出在正则里的.*是贪婪匹配,它会尽可能匹配最长的内容,所以在(-2-2i)中会从第一个-一直匹配到i前的字符,得到-2-2。要实现最短匹配,有两种可行方案:

方案一:改用非贪婪匹配

把贪婪的.*改成非贪婪的.*?,同时简化正则表达式:

string text = "(-2-2i)";
string pattern = @"[+-].*?(?=i)";
Match match = Regex.Match(text, pattern);
value += Convert.ToInt16(match.Value);

.*?会匹配到第一个满足后续(?=i)(后面跟着i)的位置,也就是只取到-2。

方案二:精准匹配数字(更推荐)

因为虚数的系数是整数(你用了Convert.ToInt16),可以直接匹配正负号加数字的组合,避免匹配多余符号:

string text = "(-2-2i)";
string pattern = @"[+-]\d+(?=i)";
Match match = Regex.Match(text, pattern);
value += Convert.ToInt16(match.Value);

这个正则只匹配+或-开头,后面跟一串数字,且后面紧接着i的内容,完全符合你提取虚数部分的需求,也不会出现误匹配的情况。

内容的提问来源于stack exchange,提问作者pejovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:12:45