簡體   English   中英

C#Regex.Split()不能按預期工作

[英]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是一個很棒的工具,可以像這樣編寫代碼片段的原型。

([\\+\\-]\\d+)代替您的正則表達式, 在這里用示例"52-2+3" 來解決問題

還添加了.Where(x => !String.IsNullOrEmpty(x)).ToList(); 拆分后,您將擺脫空字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM