我已经写好了表达式,但是每当我运行代码时,我都会得到整个字符串和一大堆空值:
Regex regex = new Regex(@"y=\([0-9]\)\([0-9]\)(\s|)\+(\s+|)[0-9]");
Match match = regex.Match("y=(4)(5)+6");
for (int i = 0; i < match.Length; i++)
{
MessageBox.Show(i+"---"+match.Groups[i].Value);
}
Run Code Online (Sandbox Code Playgroud)
预期输出:4、5、6(在不同的 MessageBox 中)
实际输出:y=(4)(5)+6
它查找输入的字符串是否正确,但一旦正确,我就无法获得特定值(4、5 和 6)。我该怎么做才能获得该代码?这可能是非常简单的事情,但我已经尝试查看 MSDN match.NextMatch 文章,这似乎也无济于事。
谢谢!
目前,您没有指定任何组。(除了周围的空间。)
您可以使用括号指定组。您当前使用的括号有反斜杠,因此它们被用作匹配的一部分。在其中添加一组额外的括号。
像这样:
new Regex(@"y=\(([0-9]+)\)\(([0-9]+)\)\+([0-9]+)");
Run Code Online (Sandbox Code Playgroud)
并带有空格:
new Regex(@"y\s*=\s*\(([0-9]+)\)\s*\(([0-9]+)\)\s*\+\s*([0-9]+)");
Run Code Online (Sandbox Code Playgroud)
这也将允许部分之间的空格是可选的,因为 * 表示 0 或更多。这比上面给出的 (?:\s+|) 更好,因为您不需要空格组。这也更好,因为管道意味着“或”。你在用 \s+| 说什么 是“一个或多个空格或什么都没有”。这与 \s* 相同,即“零个或多个空格”。
另外,我使用了 [0-9]+,因为这意味着 1 位或更多位数字。这允许匹配具有多个数字的数字,例如 10 或 100。另一个注意事项,使用 [0-9] 比 \d 更好,因为 \d 所指的不仅仅是我们习惯的数字。