[英]C# Regex.Split() does not work as expected
我正在尝试使用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
网站regexstorm net
进行了测试。
我的问题是,为什么我的字符串不能使用假定的有效正则表达式正确分割? Regex.Split()是否没有按照我认为的做? (我坚信它将把我的字符串分成+ number或-number字符串
旁注:不用符号开头也可以。 如果我的字符串以数字开头,则会在正则表达式的末尾添加“ +”。
您的Regex不是Split()ing正则表达式。
Split()期望正则表达式定义分隔符(即,以逗号或分号分隔)。 您的正则表达式描述了这些值。
似乎您想要的是Matches()的结果,而不是Split()的结果。
对于您的示例,这似乎对我有用:
List<string> numbers = valid_regex.Matches(str).Cast<Match>().Select(m => m.Value).ToList();
而且,LinqPad是一个很棒的工具,可以像这样编写代码片段的原型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.