Skip to main content
 首页 » 编程设计

c#之检查结果中是否存在正则表达式组

2024年04月18日33www_RR

我正在尝试从一行 gcode 中提取数据,它可能类似于以下任何一种:

G01 X10. Y20. Z3.0 F15. 
G00X.500Y-10. 
G01 Y10.X20.150 

现在我已经创建了与组完美匹配的正则表达式:

(G|M|X|Y|Z|I|J|K|F)(?<val>-?\d*\.?\d+\.?) 

这似乎效果很好。我为每个结果得到三组数据,例如:

G01 X10. Y20. Z3.0 F15. 
G01  |  G  |  01 
X10. |  X  |  10. 
Y20. |  Y  |  20. 
Z3.0 |  Z  |  3.0 
F15. |  F  |  15. 

我想做的是能够检查输入字符串中有哪些值,这样我就可以提取数据并发出位置命令。以上面的示例为例,我只想提取 X、Y 和 Z 值,以便创建它们的 Vector。当我拥有所有 3 个值时,这很容易做到,但是如果输入字符串是 G01 X10,我如何检查第一组中是否存在值。 Y5.0?

请您参考如下方法:

为此,我决定遍历每个正则表达式匹配项,然后检查第一组是 X、Y 还是 Z,并使用 switch 语句更改 3D 向量的值。这是代码,以防其他人想要产生类似的东西:

public static void ExtractAll(string gcode) 
{ 
    dataPos = Vector3.zero; 
 
    var match = Regex.Matches(gcode, @"(G|M|X|Y|Z|I|J|K|F)(?<val>-?\d*\.?\d+\.?)"); 
    for (int i = 0; i < match.Count; i++) 
    { 
        switch (match[i].Groups[1].Value) 
        { 
            case "X": 
                dataPos.x = float.Parse(match[i].Groups["val"].Value); 
                break; 
            case "Y": 
                dataPos.y = float.Parse(match[i].Groups["val"].Value); 
                break; 
            case "Z": 
                dataPos.z = float.Parse(match[i].Groups["val"].Value); 
                break; 
        } 
    } 
    print(dataPos); 
} 

注意使用正则表达式你需要包含它的命名空间: 使用 System.Text.RegularExpressions;