获取字母后数字:
cnc.need_X = Get_G_Value(input, @"[Xx][-+]?\d+\.?\d+", out cnc.X坐标);// 字母后的数字
cnc.need_Y = Get_G_Value(input, @"[Yy][-+]?\d+\.?\d+", out cnc.Y坐标);// 字母后的数字
cnc.need_Z = Get_G_Value(input, @"[Zz][-+]?\d+\.?\d+", out cnc.Z坐标);// 字母后的数字
public bool Get_Value64(Match match, out double num) { //match = Regex.Match(match.Value, @"[-]?\d+\.?\d+"); // - .【去字母】 match = Regex.Match(match.Value, @"[-]?\d+\.?(\d+)?"); // - .【去字母】 if (double.TryParse(match.Value, out num)) return true; return false; } public bool Get_G_Value(string input, string pattern, out double i64)// 字母后的数字 {// 自裁出匹配条件的数据 //MatchCollection matches = Regex.Matches(input, pattern); //Match matches = (Match)Regex.Matches(input, pattern); //foreach (Match match in matches) //{ // return int.Parse( match.Value); //} Match X字母; //X字母 = Regex.Match(input, $@"[{pattern}][-+]?\d+\.?\d+");// 字母后数字 X+123.456 X字母 = Regex.Match(input,pattern);// 字母后数字 X+123.456 return Get_Value64(X字母, out i64);// 去字母 }
下面是一个使用C#编写的解析G代码的示例方法:
下面是一个使用C#编写的解析G代码的示例方法: csharp using System; using System.Collections.Generic; public class GCodeParser { public static List<GCodeCommand> ParseGCode(string gcode) { var commands = new List<GCodeCommand>(); // 按行分割G代码 var lines = gcode.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { // 忽略空行和注释行 if (string.IsNullOrWhiteSpace(line) || line.Trim().StartsWith(";")) { continue; } // 分割行为指令和参数 var parts = line.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 0) { continue; } // 第一个部分是指令 var command = new GCodeCommand(); command.Instruction = parts[0].ToUpper(); // 其余部分是参数 for (int i = 1; i < parts.Length; i++) { var parameter = parts[i]; // 分割参数名和值 var equalsIndex = parameter.IndexOf('='); if (equalsIndex > 0) { var parameterName = parameter.Substring(0, equalsIndex); var parameterValue = parameter.Substring(equalsIndex + 1); command.Parameters[parameterName] = parameterValue; } else { // 参数没有指定名称,默认使用字母序号作为参数名 command.Parameters[i.ToString()] = parameter; } } commands.Add(command); } return commands; } } public class GCodeCommand { public string Instruction { get; set; } public Dictionary<string, string> Parameters { get; set; } public GCodeCommand() { Parameters = new Dictionary<string, string>(); } } 使用示例: csharp var gcode = "G1 X10 Y20 Z30" + Environment.NewLine + "G2 X50 Y50 R20" + Environment.NewLine + "G28" + Environment.NewLine + "; This is a comment" + Environment.NewLine + "G90"; var commands = GCodeParser.ParseGCode(gcode); foreach (var command in commands) { Console.WriteLine("Instruction: " + command.Instruction); foreach (var parameter in command.Parameters) { Console.WriteLine("Parameter: " + parameter.Key + " = " + parameter.Value); } Console.WriteLine(); } 输出结果: Instruction: G1 Parameter: 1 = X10 Parameter: 2 = Y20 Parameter: 3 = Z30 Instruction: G2 Parameter: 1 = X50 Parameter: 2 = Y50 Parameter: 3 = R20 Instruction: G28 Instruction: G90
正则表达式:
用正则表达式提取文本字母G后面的double类型的数字。
using System; using System.Text.RegularExpressions; class Program { static void Main() { string text = "Some text with G3.14 and g2.718 and other stuff"; Regex regex = new Regex(@"(?i)[Gg]([0-9]+(\.[0-9]+)?)"); MatchCollection matches = regex.Matches(text); foreach (Match match in matches) { if (match.Groups.Count > 1) { Console.WriteLine(match.Groups[1].Value); } } } }
这段代码使用正则表达式
(?i)[Gg]([0-9]+(\.[0-9]+)?)
来匹配文本中字母 “G” 或 “g” 后面的 double 类型小数,并将其输出。正则表达式中的
(?i)
表示不区分大小写,
[Gg]
匹配 “G” 或 “g”,后面的[0-9]+(\.[0-9]+)?
匹配一个或多个数字,以及可选的小数点和一个或多个数字。
+表示多个
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjyfx/598.html