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

aydmsdu9  于 2023-08-08  发布在  C#
关注(0)|答案(2)|浏览(121)

我正在试用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字符串

  • 边注:它是确定的,如果它不以一个标志开始。如果我的字符串以数字开头,它将在末尾添加“+”以用于正则表达式。
wkftcu5l

wkftcu5l1#

您的正则表达式不是Split()ing正则表达式。
Split()期望正则表达式定义分隔符(即用逗号或分号分隔)。正则表达式描述了这些值。
看起来你想要的是Matches()而不是Split()的结果。
这似乎对我的工作与你的例子:

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

字符串
此外,LinqPad是一个很好的工具,可以对这样的代码片段进行原型化。

ogsagwnx

ogsagwnx2#

将regexp替换为([\+\-]\d+),在示例"52-2+3"here中就可以做到这一点。
在拆分后还添加了.Where(x => !String.IsNullOrEmpty(x)).ToList();,这样就可以去掉空字符串。

相关问题