如何获取与正则表达式(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
我有一些字符串,如“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