簡體   English   中英

檢查結果中是否存在正則表達式組

[英]Check if regex group exists in result

我正在嘗試從一行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 ,如何檢查第一組中是否存在值G01 X10. Y5.0 G01 X10. Y5.0

我剛剛啟動了一個有助於提取信息的GCode解析庫: https//github.com/chrismiller7/GCodeNet

您可以像下面這樣使用它:

var cmd = Command.Parse("G01 X10. Y20. Z3.0 F15.");
var X = cmd.GetParameterValue(ParameterType.X);
var Y = cmd.GetParameterValue(ParameterType.Y);
var Z = cmd.GetParameterValue(ParameterType.Z);

此外,您可以閱讀整個gcode文件:

var gcodeFile = new GCodeFile(File.ReadAllText("file.gcode"));
foreach (var cmd in gcodeFile.Commands)
{
   var X = cmd.GetParameterValue(ParameterType.X);
   var Y = cmd.GetParameterValue(ParameterType.Y);
   var Z = cmd.GetParameterValue(ParameterType.Z);
}

GCodeFile類將在一行上處理注釋,CRC校驗,行號和多個命令。

為了做到這一點,我決定迭代每個正則表達式匹配,然后我檢查第一組是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);
}

注意使用正則表達式,你需要包含它的命名空間: using System.Text.RegularExpressions;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM