[英]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.