仅提取数字,不提取任何运算符

时间:2018-09-16 13:53:07

标签: c#

嗨,我正在尝试仅匹配包含运算符的字符串中的数字。 但是下面的regEx也给了我我不知道为什么的运算符? 例如,我有字符串"2X/8",而我试图摆脱8。

if(Regex.IsMatch(elements[i], @"\d"))
{
    Console.WriteLine("Adding to numberstack:+ ", elements[i]);
    numberStack.Push(elements[i]);
}

if (i >= elements.Length - 1)
{
    Console.WriteLine("Inside the popper");
    if ((i - 2) >= 0)
    {
        Console.WriteLine(numberStack.Peek());
        if (elements[i - 1].Contains("/*") && elements[i - 2].Contains("X"))
        {
            numberStack.Pop();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这个问题似乎让我感到困惑,但是我假设以下内容(如果我错了,请纠正我):

  • 您正在尝试查找字符串开头是否存在数字,并提取该数字
  • “元素”是字符串元素的数组。
  • “ numberStack”是一串字符串元素。

如果是这样,请注意,您正在将“ elements [i]”值推入堆栈,据我了解,该值包含您要评估的表达式的“ 整个字符串”(“ 2X / 8”根据您的示例),而不仅仅是表达式开头的数字。这可以解释为什么您不仅在结果中得到数字“ 2”,而且还得到整个“ 2X / 8”值。

有多种方法可以提取表达式的数字,并根据您的特定需求选择其中一种。

作为一个简单的示例,如果您只想从字符串中提取每组数字,则可以在该字符串中获取正则表达式的所有匹配项并对其进行迭代:

string theExpression = "2X/8+123";

MatchCollection matches = Regex.Matches(theExpression, @"\d+");
foreach (Match m in matches)
    Console.WriteLine(m.Value);

Console.ReadLine();

此示例将从给定表达式中将数字28123打印到输出中。