C#Regex.Split()无法按预期工作

时间:2017-07-07 15:06:17

标签: c# regex

我在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;
    }

我的代码是什么? 我输入了附加信息&amp;减法,它做的操作&amp;将结果作为整数返回。

示例: 如果我输入&#34; 52-2 + 3&#34;它应该返回53

问题: 我的代码总是返回99,这意味着解析失败了。 为了以防万一,我尝试了int.TryParse("-2", out int n)而且工作正常。

该行不起作用:

List<string> numbers = new List<string>(valid_regex.Split(str).ToArray());

我的正则表达式很好,我使用网站regexstorm net测试了它们。

我的问题是,为什么我的字符串无法使用假定的有效正则表达式正确分割? Regex.Split()没有做我认为的吗? (我认为它会把我的字符串分成+数字或 - 数字字符串

旁注:如果不以符号开头,那就没关系。如果我的字符串以数字开头,它将添加&#34; +&#34;最后用于正则表达式。

2 个答案:

答案 0 :(得分:1)

你的正则表达式不是Split()正则表达式。

Split()期望正则表达式定义分隔符(即以逗号或分号分隔)。你的正则表达式描述了这些值。

似乎你想要Matches()的结果而不是Split()。

这似乎对我的例子很有用:

List<string> numbers = valid_regex.Matches(str).Cast<Match>().Select(m => m.Value).ToList();

此外,LinqPad是一个很好的工具,可以像这样编写代码片段。

答案 1 :(得分:0)

使用([\+\-]\d+)替换正则表达式,结果示例"52-2+3" here

在分割后添加.Where(x => !String.IsNullOrEmpty(x)).ToList();,以便摆脱空字符串。