从字符串c#中解析多个值

时间:2013-05-27 14:39:10

标签: c# string parsing

假设我写了“5和6”或“5 + 6”。如何在c#中将5和6分配给两个不同的变量?

P.S。如果在字符串中找到某些字符,我也想做某些工作。假设我写了5 + 5。这段代码会这样做吗?

 if(string.Contains("+"))
 {
     sum=x+y;
 }

9 个答案:

答案 0 :(得分:8)

string input="5+5";

var numbers = Regex.Matches(input, @"\d+")
                   .Cast<Match>()
                   .Select(m => m.Value)
                   .ToList();

答案 1 :(得分:2)

就个人而言,我会投票反对做一些分裂和正则表达式的东西。

相反,我会(并且在过去做过)使用众多表达式评估库中的一个,例如this one over at Code Project(以及updated version over at CodePlex)。

使用上面的解析器/工具,您可以执行以下操作:

enter image description here

然后,简单的表达式评估可能如下所示:

Expression e = new Expression("5 + 6");
Debug.Assert(11 == e.Evaluate());

对我而言,这比单独进行解析(包括正则表达式等)更具有错误性。

答案 2 :(得分:1)

这样的事情可能会有所帮助

string strMy = "5&6";
char[] arr = strMy.ToCharArray();
List<int> list = new List<int>();
foreach (char item in arr)
{
  int value;
  if (int.TryParse(item.ToString(), out value))
  {
    list.Add(item);
  }
}

list将包含所有整数值

答案 3 :(得分:0)

您的字符串应使用其他名称,而不是string

var numbers = yourString.Split("+");
var sum = Convert.ToInt32(numbers[0]) + Convert.ToInt32(numbers[1]);

注意:这是一个没有任何错误检查或错误处理的实现......

答案 4 :(得分:0)

您可以使用String.Split方法;

string s = "5 and 6";
string[] a = s.Split(new string[] { "and", "+" }, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(a[0].Trim());
Console.WriteLine(a[1].Trim());

这是DEMO

答案 5 :(得分:0)

如果要将字符串中的数字分配给变量,则必须解析字符串并进行转换。

简单示例,如果您的文字只有一个数字

string text = "500";
int num = int.Parse(text);

现在,如果要解析更复杂的东西,可以使用split()和/或regex来获取它们之间的所有数字和运算符。比你只是迭代数组并为变量赋值。

string text = "500+400";
if (text.Contains("+"))
{
 String[] data = text.Split("+");
 int a = int.Parse(data[0]);
 int b = int.Parse(data[1]);
 int res = a + b;
}

基本上,如果你之间只有2个数字和operazor,那就ok了。如果你想制作“计算器”,你将需要更多东西,比如Binary Trees或Stack。

答案 6 :(得分:0)

使用String.Split方法。它将你的字符串rom分割为给定的字符,并返回一个字符串数组,其中包含根据要破坏的字符分解为多个部分的值,在本例中为“+”。

        int x = 0;
        int y = 0;
        int z = 0;

        string value = "5+6";
        if (value.Contains("+"))
        {
            string[] returnedArray = value.Split('+');
            x = Convert.ToInt32(returnedArray[0]);
            y = Convert.ToInt32(returnedArray[1]);
            z = x + y;
        }

答案 7 :(得分:0)

使用正则表达式获取这些值,然后打开操作数进行计算

        string str = "51 + 6";
        str = str.Replace(" ", "");
        Regex regex = new Regex(@"(?<rightHand>\d+)(?<operand>\+|and)(?<leftHand>\d+)");

        var match = regex.Match(str);
        int rightHand = int.Parse(match.Groups["rightHand"].Value);
        int leftHand = int.Parse(match.Groups["leftHand"].Value);
        string op = match.Groups["operand"].Value;

        switch (op)
        {
            case "+":
            .
            .

            .


        }

答案 8 :(得分:0)

拆分功能可能使用起来很舒适,但空间效率低 因为它需要字符串数组
也许Trim(),IndexOf(),Substring()可以代替Split()函数