分析C#中的2个数字除以减号
本文关键字:数字 中的 2个 分析 | 更新日期: 2023-09-27 18:26:33
我必须解析一个字符串。它包含一个或两个数字。
它可以有3个from。
- {number1}-{数字2}
- {number1}-
- -{数字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的值,我希望它以元组的形式返回。
我陷入了假设之中。
(编辑以从注释中添加更新的正则表达式)
您似乎可以使用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{}