在C#中解析2个数字除以减号

时间:2012-03-02 17:54:45

标签: c# string-parsing

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

它可以有3个来自。

  1. {NUMBER1} - {NUMBER2}
  2. {NUMBER1} -
  3. - {NUMBER2}
  4. 数字可能是负数。

    例如:

    • 100-200表示:number1 = 100,number2 = 200
    • -100表示​​:number1 = null,number2 = 100
    • 200-表示:number1 = 200,number2 = null

    现在更难的部分:

    • -100-200表示:number1 = -100,number2 = 200
    • -100-表示:number1 = -100,number2 = null
    • - 100表示​​:number1 = null,number2 = -100
    • 100--200表示:number1 = 100,number2 = -200
    • -100--200表示:number1 = -100,number2 = -200

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

    任何无法解析为2 ints的东西都会抛出一个formatexception(int.Parse执行此操作,因此可以依赖它)。

    我需要一个解析器来解析它到两个int? -s(可以为空的整数)。

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

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

    我纠结于ifs。

3 个答案:

答案 0 :(得分:8)

编辑以从评论添加更新的正则表达式

看起来您可以使用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;
}

答案 1 :(得分:6)

您是否考虑使用正则表达式?

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

答案 2 :(得分:-2)

你可以试试.Split()方法:

string testString = "100-200" ;

string[] results = testString.Split('-');

 int nr1;
 int nr2;
try
{
  nr1  = Convert.toInt32(results[0]);
  nr2  = Convert.toInt32(results[1]);
}
catch{}