我正在试用C#中的服务,因此无法使用Console.WriteLine(...)调试值。这就是为什么我不知道我的变量最后是什么:
public int addAndSoustractNumberFromAString(string ustr)
{
int result = 0;
if(!string.IsNullOrEmpty(str))
{
string str = ustr.Trim();
//Regexes
System.Text.RegularExpressions.Regex valid_regex = new System.Text.RegularExpressions.Regex(@"[\+]\d+|[\-]\d+");
System.Text.RegularExpressions.Regex invalid_regex = new System.Text.RegularExpressions.Regex(@"[a-zA-Z]");
//Handling errors
if (invalid_regex.IsMatch(str) || !valid_regex.IsMatch(str) || !Char.IsDigit(str[str.Length - 1])) return 0;
if (Char.IsDigit(str[0])) str = "+" + str;
//Load all numbers in a string array
List<string> numbers = new List<string>(valid_regex.Split(str).ToArray());
//Cast string numbers to int + result calculation
foreach (string number in numbers) { if (!int.TryParse(number, out int n)) return 99; result += n; }
}
return result;
}
字符串
**我的代码是什么?**我输入加法和减法,它会执行运算并将结果作为整数返回。
**示例:**如果我输入“52-2+3”,它应该返回53
**问题:**我的代码总是返回99,表示解析失败。为了以防万一,我尝试了int.TryParse("-2", out int n)
,它工作正常。
不工作的线路:
List<string> numbers = new List<string>(valid_regex.Split(str).ToArray());
型
我的正则表达式很好,我用网站regexstorm net
测试了它们。
我的问题是,为什么我的字符串没有使用假定的有效正则表达式正确拆分?Regex.Split()的功能与我所相信的不一样吗?(我以为它会把我的字符串拆分成+number或-number字符串
- 边注:它是确定的,如果它不以一个标志开始。如果我的字符串以数字开头,它将在末尾添加“+”以用于正则表达式。
2条答案
按热度按时间wkftcu5l1#
您的正则表达式不是Split()ing正则表达式。
Split()期望正则表达式定义分隔符(即用逗号或分号分隔)。正则表达式描述了这些值。
看起来你想要的是Matches()而不是Split()的结果。
这似乎对我的工作与你的例子:
字符串
此外,LinqPad是一个很好的工具,可以对这样的代码片段进行原型化。
ogsagwnx2#
将regexp替换为
([\+\-]\d+)
,在示例"52-2+3"
here中就可以做到这一点。在拆分后还添加了
.Where(x => !String.IsNullOrEmpty(x)).ToList();
,这样就可以去掉空字符串。