当前位置:网站首页 > 经验分享 > 正文

代码解析

获取字母后数字

 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]+)?匹配一个或多个数字,以及可选的小数点和一个或多个数字。

+表示多个 

版权声明


相关文章:

  • 电脑编程入门需要学什么呢知乎2024-10-20 23:01:02
  • aes加密算法原理及步骤2024-10-20 23:01:02
  • springboot配置文件yml和properties区别2024-10-20 23:01:02
  • idea创建yml文件2024-10-20 23:01:02
  • fiddler4手机抓包教程2024-10-20 23:01:02
  • java 定时任务实现原理详解2024-10-20 23:01:02
  • ngrok的使用(超详细)2024-10-20 23:01:02
  • 思科路由器修改密码2024-10-20 23:01:02
  • 单片机编程软件很简单(11),Keil单片机编程软件在线调试2024-10-20 23:01:02
  • 单片机怎么实现模块化编程?思维+实例+系统教程(实用程度令人发指)2024-10-20 23:01:02