c# - 仅从方程中获取系数
问题描述
我有一个公式如下:
第一个公式: (0.085+4.346*10^-5*((a^2)-(0^2))+0.0017228*(a-(0)))*2
系数为:
1) 0.085
2) 4.346*10^5
3) 0.0017228
第二个公式:((0.208+0*d^3-0.00000434*d^2-0.00203*d)*2)
系数是:
1) 0.208
2) 0
3) -0.00000434
4) -0.00203
从上面提到的公式中,我需要一个用 C# 编写的正则表达式来获取上面提到的系数。
我尝试了正则表达式:"[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?"
返回良好的系数 s 但不是上面第二个公式中提到的 '0'。
我尝试了以下代码:
string p = @"((0.208+0*d^3-0.00000434*d^2-0.00203*d)*2)";
var result = Regex.Matches(p, @"[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?").Cast<Match>().Select(m => m.Value).Where((x, i) => i % 2 == 0).ToList();
foreach(string item in result)
{
Console.WriteLine(item);
}
上述代码的结果:0.208
-0.00000434 -0.00203(此处缺少 0 作为所需的第二个系数。)
解决方案
所需的输出,具体来说 4.346*10^5
,会使这个表达式过于复杂,而且我也不认为 RegEx 足够好,即使你的原始表达式很好。然后我们将其稍微简化为:
-?[0-9]*(?:\.?[0-9]+)?(?:[eE][-+]?[0-9]+)?
并希望您可能会弄清楚如何输出4.346*10^5
或处理/绕过它。
测试
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"-?[0-9]*(?:\.?[0-9]+)?(?:[eE][-+]?[0-9]+)?";
string input = @"0.085+4.346*10^-5*((a^2)-(0^2))+0.0017228*(a-(0)))*2
0.208+0*d^3-0.00000434*d^2-0.00203*d)*2)";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
该表达式在此演示的右上方面板中进行了说明,如果您希望探索/简化/修改它,并且在此链接中,您可以逐步观看它如何与一些示例输入匹配,如果您愿意的话。
推荐阅读
- github-actions - Github Actions 是否可用于分叉存储库?
- macos - macCatalyst 项目的最小 macOS 部署目标?
- python-3.x - 从 Python 写入 Jupyter Notebook
- java - 尝试将重复记录插入数据库时出现 sql 异常
- mysql - 语法错误之类的问题 sql
- reactjs - 无效的挂钩调用
- java - “没有已知文件:classes2.dex”是什么意思?
- makefile - 具有动态先决条件的动态 Makefile 目标
- python - Pyspark - 如何在组中聚合超过 4 小时的窗口
- function - 在powershell中将变量从一个函数返回到另一个函数