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

时间:2018-08-12 11:11:30

标签: c# regex regular-language

我有一些字符串,例如“ 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";

我不知道是否有某些东西可以完成“分数到两倍”任务(如果是的话,请提供链接或其他内容),但是如果我可以将这些部分放入变量中,我将能够至少要进行除法和加法。

2 个答案:

答案 0 :(得分:0)

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

(\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之类的在线在线工具。

答案 1 :(得分:0)

简单操作:正则表达式已在RegexStorm上进行了测试

"start": 'node ./app.js | pino-mongodb --username=myUser --password=myPw'