嗨,我正在尝试仅匹配包含运算符的字符串中的数字。
但是下面的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();
}
}
}
答案 0 :(得分:0)
这个问题似乎让我感到困惑,但是我假设以下内容(如果我错了,请纠正我):
如果是这样,请注意,您正在将“ 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();
此示例将从给定表达式中将数字2
,8
和123
打印到输出中。