4

I am working on a simple windows forms application that the user enters a string with delimiters and I parse the string and only get the variables out of the string. So for example if the user enters:

2X + 5Y + z^3

I extract the values 2,5 and 3 from the "equation" and simply add them together.

This is how I get the integer values from a string.

int thirdValue
string temp;
temp = Regex.Match(variables[3], @"\d+").Value
thirdValue = int.Parse(temp);

variables is just an array of strings I use to store strings after parsing.

However, I get the following error when I run the application:

Input string was not in a correct format

4

4 回答 4

3

为什么我每个人都在抱怨这个问题并把它记下来?解释正在发生的事情非常容易,提问者的说法是正确的。没有任何问题。

Regex.Match(variables[3], @"\d+").Value

如果字符串(这里是)不包含任何数字,则抛出Input string was not in a correct format.. FormatException 。如果在作为服务运行时无法访问Array 的内存堆栈,它也会这样做。我怀疑这是一个错误错误是空的并且失败了。variables[3] variables[3].Value.Match

现在老实说,如果你问我,这是一个伪装成错误的功能,但它是一个设计功能。完成此方法的正确方法(恕我直言)是返回一个空白字符串。但他们不会抛出FormatException。去搞清楚。正是出于这个原因,您被建议astef不要使用 Regex,因为它会引发异常并且令人困惑。但他也被扣分了!

解决方法是使用他们也制作的这种简单的附加方法

if (Regex.IsMatch(variables[3], @"\d+")){
   temp = Regex.Match(variables[3], @"\d+").Value
}

如果这仍然对您不起作用,则您不能为此使用 Regex。我已经看到c# service这不起作用并引发不正确的错误。所以我不得不停止使用正则表达式

于 2018-01-17T09:12:57.370 回答
1

我更喜欢没有Regex

static class Program
{
    static void Main()
    {
        Console.WriteLine("2X + 65Y + z^3".GetNumbersFromString().Sum());
        Console.ReadLine();
    }

    static IEnumerable<int> GetNumbersFromString(this string input)
    {
        StringBuilder number = new StringBuilder();
        foreach (char ch in input)
        {
            if (char.IsDigit(ch))
                number.Append(ch);                
            else if (number.Length > 0)
            {
                yield return int.Parse(number.ToString());
                number.Clear();
            }
        }
        yield return int.Parse(number.ToString());
    }
}
于 2013-05-03T16:32:58.830 回答
0

这应该可以解决您的问题:

string temp;
temp = Regex.Matches(textBox1.Text, @"\d+", RegexOptions.IgnoreCase)[2].Value;
int thirdValue = int.Parse(temp);
于 2013-05-03T16:28:52.923 回答
0

您可以将字符串更改为 char 数组并检查其是否为数字并计数。

        string temp = textBox1.Text;
        char[] arra = temp.ToCharArray();
        int total = 0;
        foreach (char t in arra)
        {
            if (char.IsDigit(t))
            {
                total += int.Parse(t + "");
            }
        }
        textBox1.Text = total.ToString();
于 2013-05-03T16:27:06.853 回答