Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测字符串中的十进制数和字母_C#_String_Replace - Fatal编程技术网

C# 检测字符串中的十进制数和字母

C# 检测字符串中的十进制数和字母,c#,string,replace,C#,String,Replace,我正在写一个数学应用程序。如何在c#中检测字符串中的数字和字母。例如: string a = "2x"; // input string string b = a.Replace("2x","2*x"); // Replace string to add multiplaction sign between a number and variable 它可以是整数或双精度类型的数字。正则表达式替换: var math = new Regex(@"\d[a-zA-Z]");

我正在写一个数学应用程序。如何在c#中检测字符串中的数字和字母。例如:

string a = "2x"; // input string
string b = a.Replace("2x","2*x"); // Replace string to add multiplaction sign between a number and variable
它可以是整数或双精度类型的数字。

正则表达式替换:

var math = new Regex(@"\d[a-zA-Z]");            
var expr = "-2X-4Z-5Y";
string replaced = math.Replace(expr, m => String.Concat(m.Value[0], '*', m.Value[1]));
输出

-2*X-4*Z-5*Y
10+2*(X+5*(a+b))
更新

如果系数和变量之间可以有圆括号,则更改如下:

var math = new Regex(@"\d(\()*[a-zA-Z]");
var expr = "10+2(X+5(a+b))";
string replaced = math.Replace(expr, 
                  m => String.Concat(m.Value[0], "*", m.Value.Substring(1)));
输出

-2*X-4*Z-5*Y
10+2*(X+5*(a+b))

您可以使用
Regex.Replace
函数

Regex.Replace(@"(?<=\d)(?=[a-zA-Z])", "*");

这取决于您希望十进制数字的格式。2.5或2.5表示2.5吗?使用正则表达式,如val=Regex.Match(subjectString,@“-?\d+”).Value。它将以字符串形式为您提供该数字。然后可以使用int.parse(val)解析为int;方法。
Regex.Replace(@)(?谢谢,它工作得很好。如果用户像这样输入“2(x)”,需要更改什么?@Bilal,这取决于。2(x)可以是
2*(x)
func2(x)
f2(x)
的一部分。我认为,Regex是不够的,你需要一个更智能的表达式解析器,如果它只有2(x)不是函数。那么有什么解决方案吗?我如何修改它以添加一个单词“log10”的例外?谢谢你的帮助。@Bilal,log10有什么问题吗?它不是由正则表达式修改的,因为数字在字母后面