如何只提取一个数字,而不是任何运算符

问题描述 投票:-1回答:1

嗨,我试图只匹配包含运算符的字符串中的数字。然而以下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();
        }
    }
}
c#
1个回答
0
投票

这个问题对我来说似乎有点混乱,但我假设如下(如果我错了,请纠正我):

  • 您试图发现字符串开头是否有数字,并提取该数字
  • “elements”是一个字符串元素数组。
  • “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打印到输出。

© www.soinside.com 2019 - 2024. All rights reserved.