如何获取与正则表达式(c#)匹配的字符串的一部分?

How to get a part of string matching a regular expression (c#)?

我有一些字符串,如“8 2 / 5”、“5 5/ 7”等,包含数学分数。我需要将它们转换成双打。那么,我怎样才能得到这些零件 “ 8 ” "2 / 5", 进入变量?

var src = " 8 2 /  5";
string base = getBase(src);
string frac = getFrac(src);
// Now base must contain "8" and frac "2/5";

我不知道是否有一些东西可以做到这一点 "fraction-to-double" 任务已经存在(如果是的话,给一个 link 或其他东西),但如果我能把这些部分变成变量我至少会做除法和加法

最简单的方法是像这样的正则表达式

(\d) (\d) \/ (\d)

这将适用于单个数字并且所有空格都设置正确。编写代码来计算结果可能看起来像

string src = "8 2 / 5";

Regex rx = new Regex(@"(\d) (\d) \/ (\d)");
Match m = rx.Match(src);

if (m.Success)
{
    int bs = Convert.ToInt32(m.Groups[1].Value);
    int f1 = Convert.ToInt32(m.Groups[2].Value);
    int f2 = Convert.ToInt32(m.Groups[3].Value);

    double result = bs + (double)f1 / f2;
}

要允许在您的号码之间使用多个数字和多个空格,您可以改进正则表达式,例如

(\d*)\s+(\d*)\s+\/\s+(\d*)

要测试正则表达式,您可以使用一些在线工具,例如 regex101

简单操作:正则表达式在RegexStorm

上测试
String src = " 8 2 /  5";
String Regex = @"([1-9])([0-9]*)([ ])([1-9])([0-9]*)((.)([0-9]+)|)([ ])([- / + *]){1}([ ])([1-9])([0-9]*)((.)([0-9]+)|)";

if(!Regex.IsMatch(src , Regex ))
   return;


float Base = float.Parse(Base.Split(" ")[0], CultureInfo.InvariantCulture.NumberFormat);
float Devided= float.Parse(Base.Split(" ")[1], CultureInfo.InvariantCulture.NumberFormat);
float Operator= float.Parse(Base.Split(" ")[2], CultureInfo.InvariantCulture.NumberFormat);
float Denominator= float.Parse(Base.Split(" ")[3], CultureInfo.InvariantCulture.NumberFormat);

//TODO your operation here