分析C#中的2个数字除以减号

本文关键字:数字 中的 2个 分析 | 更新日期: 2023-09-27 18:26:33

我必须解析一个字符串。它包含一个或两个数字。

它可以有3个from。

  1. {number1}-{数字2}
  2. {number1}-
  3. -{数字2}

数字可以是负数。

例如:

  • 100-200表示:数字1=100,数字2=200
  • -100表示:number1=空,number2=100
  • 200-表示:number1=200,number2=null

现在更困难的部分:

  • -100-200表示:数字1=-100,数字2=200
  • -100表示:number1=-100,number2=null
  • --100表示:number1=null,number2=-100
  • 100-200表示:数字1=100,数字2=-200
  • -100-200表示:number1=-100,number2=-200

  • -100-200-表示:抛出新的FormatException()。它不是一个有效的字符串。

任何不能被解析为2 int的东西都会抛出一个formatexception(int.Parse会这样做,所以它可以被依赖)。

我需要一个解析器将其解析为两个int-s(可为null的int)。

每个字符串要么有效(有意义),要么无效(没有意义)。没有一个字符串可以表示两件事(至少我没有找到一个)。

如果我有2的值,我希望它以元组的形式返回。

我陷入了假设之中。

分析C#中的2个数字除以减号

编辑以从注释中添加更新的正则表达式

您似乎可以使用Regex类来解决这个问题,因为您的语法是非常规则和结构化的:

var regex = new Regex(@"^(?<first>-?['d.,]+)?-(?<second>-?['d.,]+)?$");
var match = regex.Match(input);
if (match.Success)
{
  int? a = match.Groups["first"].Success
    ? Int32.Parse(match.Groups["first"].Value) 
    : (int?)null;
  int? b = match.Groups["second"].Success
    ? Int32.Parse(match.Groups["second"].Value) 
    : (int?)null;
}

您考虑过使用正则表达式吗?

^(-?'d+)?-(-?'d+)?$

您可以尝试.Splitt()方法:

string testString = "100-200" ;
string[] results = testString.Split('-');
 int nr1;
 int nr2;
try
{
  nr1  = Convert.toInt32(results[0]);
  nr2  = Convert.toInt32(results[1]);
}
catch{}